【问题标题】:Having trouble while adding elements to array and print them在向数组添加元素并打印它们时遇到问题
【发布时间】:2019-04-18 19:32:52
【问题描述】:

我正在尝试创建一个大小取决于输入元素计数的数组。之后我想打印它,但我得到了非常奇怪的输出。

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.

它会给出这样的输出,过了一会儿它会停止获取元素。我不知道我在哪里做错了。

【问题讨论】:

  • 你声明了一个大小为0的数组。我更像是一个c ++人,但我认为你的数组大小在你声明它时是固定的,当大小为0时。(大概你输入UB当你开始写到结尾时)
  • 你是对的,但它并没有解决我的问题。现在我在放置第一个元素后得到类似 4202816 1 37 的输出。也许指针可以帮助我,但首先我想知道为什么这不起作用以及我该如何解决它。
  • 你想要的输出是什么?你想达到什么目的?
  • 这段代码仍然显示你声明一个大小为 0 的数组并写到末尾。未定义的行为。 (请提供准确的输入、输出和预期输出)

标签: c arrays printing


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多