【发布时间】:2017-04-24 09:13:43
【问题描述】:
我有一个与此代码相关的问题。
#include <stdio.h>
void main()
{
char array[0];
scanf("%s", array);
printf("%s", array);
return;
}
当我在输入字段中输入数据时,它会存储在数组中并获得输出,但它的大小是 0。
另一件事发生的是,当我输入假设 'a' 12 次然后以某种方式控制到达 scanf() 以获取输入,然后再次输入 'a' 12 次控制再次到达 scanf() 并且这样直到我输入少于 12 个字符。
如果输入超过 12 个字符,程序就会崩溃。
为什么会这样?
【问题讨论】:
-
未定义的行为。
-
您的编译器应该会生成一条错误消息,
0的大小是违反约束的。 -
@Olaf - 不一定 - GCC 提供零长度数组作为 compiler-specific 扩展......但是,写入这样的数组仍然是未定义的行为(除非有是从正确分配的更大内存中投射出来的)。
-
@Aconcagua:问题没有说明它是哪个编译器,因此代码确实调用了UB。即使有这个多余的扩展,代码也会调用 UB 来解除对无效指针地址的引用。
-
也许你的意思是
int main(void)...