我尝试使数组中的代码计数元素生效,
问题是gcc在for
中的main()
语句中以及从函数调用countreturn(size_t sz, int *arr)
中输出了不同的输出。
下面是输出和代码。 输出:
----------
1 1 1 1 1
1 1 1 1 32766
5
0
for
语句打印1,而不是32766,但是使用功能时,它打印32766。
#include<stdio.h>
int countreturn(size_t sz, int *arr){
int i=0, count = 0;
while(arr[i]!='\0'&&i<sz){
++i;
++count;
printf("%d ",arr[i]);
}
printf("\n");
return count;
}
int main(){
int store[5] = {[0 ... 4] = 1 };
printf("-----------------\n");
for(int i = 0; i <5; ++i){
printf("%d ", store[i]);
}
printf("\n");
printf("-----------------\n");
int store2[500] = {'\0',};
printf("%d\n", countreturn(sizeof(store)/sizeof(int),store));
printf("%d\n", countreturn(sizeof(store2)/sizeof(int),store2));
return 0;
}
答案 0 :(得分:1)
移动增量以打印数组元素0-4,
而不是元素1-5,这意味着要访问超出数组大小的位置,并得到未定义的行为,从而得到任何奇怪的值。
while(arr[i]!='\0'&&i<sz){
++count;
printf("%d ",arr[i]);
++i;
}
答案 1 :(得分:1)
问题是您先增加i的值,然后再打印存储在ith索引处的值,这就是为什么您的代码正在打印垃圾值。
#include<stdio.h>
int countreturn(size_t sz, int *arr){
int i=0, count = 0;
while(arr[i]!='\0'&&i<sz){
printf("%d ",arr[i]); //print first then
++i; // increment value if i
++count;
}
printf("\n");
return count;
}
int main(){
int store[5] = {[0 ... 4] = 1 };
printf("-----------------\n");
for(int i = 0; i <5; ++i){
printf("%d ", store[i]);
}
printf("\n");
printf("-----------------\n");
int store2[500] = {'\0',};
printf("%d\n", countreturn(sizeof(store)/sizeof(int),store));
printf("%d\n", countreturn(sizeof(store2)/sizeof(int),store2));
return 0;
}