将元素添加到数组并打印时遇到麻烦

时间:2019-04-18 19:32:53

标签: c arrays printing

我正在尝试创建一个数组,数组的大小取决于输入元素的数量。之后,我想打印它,但输出却很奇怪。

int main(void)
{
    int input_arr;
    int i,size=0;
    int arr[size];

    while(input_arr!=-1){
        printf("enter positive int");
        scanf("%d",&input_arr);

        arr[size]=input_arr;
        printf("%d",arr[size]);

        for(i=0;arr[i]!='\0';i++){
            printf("%d ",arr[i]);
        }

        size+=1;
    }
    return 0;
}
  

33 3 3 3 3 3 6487488 enter positive int3.

它给出这样的输出,并在一段时间后停止接收元素。我不知道我在哪里做错了。

1 个答案:

答案 0 :(得分:2)

在C语言中,数组的大小在您定义数组时即已固定。增加size变量不会增加数组大小。因此,当您读取第一个元素时,您会立即获得缓冲区溢出。您可以改为声明一个大型数组,如下所示:

static const int maxSize = 4096;
int arr[maxSize];

int main(void)
{
    int i, size=0;

    while(size < maxSize){
        printf("enter positive int");
        scanf("%d", &arr[size]);
        ++size;

        for(i=0; i < size; i++){
            printf("%d ",arr[i]);
        }
        printf("\n");
    }
    return 0;
}

或者,您可以使用mallocrealloc来动态扩展数组。