gpt4 book ai didi

c - C编程中未知绑定(bind)数组的用法

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:37 24 4
gpt4 key购买 nike

我多次运行时,以下代码的输出未定义。我想知道为什么输出是未定义的,以及当我尝试将值分配给未知边界的数组时会产生什么影响。

#include <stdio.h>

int main()
{
int a[]= {};
int num_of_elements;
int count = 0;

printf("Enter the number of elements:\n");
scanf("%d",&num_of_elements);

printf("Enter the numbers:\n");
for(count=0; count<num_of_elements; ++count)
{
scanf("%d", &a[count]);
}
printf("\n");

for(count=0; count<num_of_elements; count++)
{
printf("%d, ", a[count]);
}
printf("\n");

return 0;
}

不同时间运行时的输出:

Enter the number of elements:
2

Enter the numbers:
1 2

0, 0,

Enter the number of elements:
3

Enter the numbers:
1 2 3

0, 0, 2,

Enter the number of elements:
4

Enter the numbers:
1 2 3 4

0, 0, 2, 3,
Segmentation fault

Enter the number of elements:
5

Enter the numbers:
1 2 3 4 5

0, 0, 2, 3, 4,
Segmentation fault

最佳答案

作为第一个提示,当您尝试使用 -pedantic 使用 gcc 编译它时,它将拒绝编译:

$ gcc -std=c11 -Wall -Wextra -pedantic -ocrap.exe crap.c
crap.c: In function 'main':
crap.c:5:12: warning: ISO C forbids empty initializer braces [-Wpedantic]
int a[]= {};
^
crap.c:5:7: error: zero or negative size array 'a'
int a[]= {};
^

事实上,这样一个变量的大小是0,所以你不能在其中存储任何

它仍然是一种有效的语法并且有其用途,例如作为结构的“灵活数组成员”:

struct foo
{
int bar;
int baz[];
};

[...]

struct foo *myfoo = malloc(sizeof(struct foo) + 5 * sizeof(int));
// myfoo->baz can now hold 5 integers

关于c - C编程中未知绑定(bind)数组的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44280905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com