c - 向数组添加元素并打印它们时遇到问题

标签 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.

它给出这样的输出,一段时间后它停止获取元素。我无法识别我哪里做错了。

最佳答案

在 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 动态增长数组。

关于c - 向数组添加元素并打印它们时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55752656/

相关文章:

c - 我需要编写一个分配更改程序。我完成了代码,但有一些问题。请帮我调试代码

c++ - 查找并替换字符数组中的单词

PYTHON -> 创建一个在导入时打印内容的模块

python - 当我在 Python 中打印 utf-8 文件中的文本时,为什么看不到希伯来字符?

c - 在 Visual Studio 中使用 "Command Arguments"进行调试不起作用

c++ - 我想知道是否有可能在使用调试器Visual Studio代码进入if语句之前检查if语句的计算结果

arrays - 散列的散列 : How to get the number of occurrences of a key?

c++ - 删除和移动数组 C++ 中的剩余元素

.net - Outlook 互操作 PrintOut 文档名称

c - 特里树,C 代码。效率低?