整数数组中元素的不同打印输出

时间:2018-07-08 17:10:40

标签: c

我尝试使数组中的代码计数元素生效,
问题是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;
}

2 个答案:

答案 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;
}