c-分段故障.函数可以从一个元素跳到另一个元素,并将输出保存到数组中



我正试图从一个元素跳到另一个元素,该元素具有指定的跳跃次数和跳跃次数,例如,k=4,如果到达终点,它将从起点返回。例如,在代码中,[Max]的数组将类似于{1,4,7,1}

#define Max 100
int main() {
int i=0,n,k,counter,j=0;
char v[Max]={1,2,3,4,5,6,7,8};
int a[Max];
k=4;
counter=k+1;
int size=strlen(v);
while(counter!=0) {
for(i=0;i<size;i=i+k-1){
a[j]=(int)v[i];
j++;
counter--;
}
}
}

您不应该为此使用字符串或strlen()。使用int数组,您可以通过使用sizeof来获取int数组的大小。这里,sizeof(v)将告诉您为数组分配的字节数,在本例中为36(假设int为4个字节(。然后可以用sizeof(int)除以整数的字节数,得到数组中的元素数9

您正在分段,因为您的写入超出了数组的范围。你不需要那个外环,应该完全去掉它。要获得数组的环绕,请对数组的大小使用模数运算(%(。理解模算子%

#include <stdio.h>
#define MAX 100
int main() {
int i = 0, ii = 0, k = 4, counter = k - 1, j = 0;
int v[]= {1, 2, 3, 4, 5, 6, 7, 8, 9};
int a[MAX];
int size = sizeof(v) / sizeof(int);
for (i=0; counter >= 0; i += k - 1) {
a[ii++] = v[j];
counter--;
j = (j += 3) % size;
}
for (int i = 0; i < k; i++) {
printf("%dn", a[i]);
}
}

输出:

1
4
7
1

相关内容

最新更新