有什么神秘的事情发生?

Ama*_*kar -6 c arrays

我有一个与此代码相关的问题.

 #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个字符,程序崩溃.

为什么会这样?

Sou*_*osh 5

像这样的陈述

 char array[0];
Run Code Online (Sandbox Code Playgroud)

是符合ISO C的无效代码.这是纯粹的约束违规.大小必须大于0.

引用C11,章节§6.7.6.2(强调我的)

除了可选的类型限定符和关键字之外static,[]可以分隔表达式或*.如果它们分隔表达式(指定数组的大小),则表达式应具有整数类型.如果表达式是常量表达式,则其值应大于零.[...]

那说,

  • void main()不是托管环境的一致签名.它int main(void)至少需要符合标准.

  • 在使用scanf()和家人的时候,总是

  • @AmanWarudkar这是什么?随机实验?阅读基础知识并事先了解您尝试实现的目标.只是因为你可以键入任何内容,不会使它成为有效的代码. (2认同)