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