我遇到与此代码相关的问题。
#include <stdio.h>
void main()
{
char array[0];
scanf("%s", array);
printf("%s", array);
return;
}
当我在输入字段中输入数据时,它会在数组中存储并获得输出,但它的大小为0.
另一件事情是,当我输入假设'a'12次然后以某种方式控制到达scanf()
以获取输入并再次进入'a'12次控制再次达到{{1}这一直持续到我输入少于12个字符。
如果输入超过12个字符,程序将崩溃。
为什么会这样?
答案 0 :(得分:5)
像
这样的陈述 char array[0];
是符合ISO C的无效代码。这是纯粹的约束违规。大小必须大于0。
引用C11
,章节§6.7.6.2(强调我的)
除了可选的类型限定符和关键字
static
之外,[
和]
可能会划界 表达式或*
。如果它们分隔表达式(指定数组的大小),则 表达式应具有整数类型。 如果表达式是常量表达式,它应该是 值大于零。 [...]
那就是说,
void main()
不是托管环境的符合签名。它至少需要int main(void)
符合标准。
在使用scanf()
和家人时,始终
通过提供最大字段宽度来限制输入的长度,例如
char input [10] = {0};
scanf("%9s", input);
检查返回值以确保调用成功。