繁体   English   中英

以下代码片段的输出应该是什么?为什么?

[英]What should be the output of this following code snippet and why?

以下代码片段的输出应该是什么?为什么?

     #include <stdio.h>
     #include <string.h>
     int main()
     {
        char ch = 'A';
        char str[3];
        strcpy(str, "ABCDE");
        printf("%c", ch);
      }

该程序的输出可能是任何东西,因为您超出了缓冲区str并获得了未定义的行为。 实际上,该程序可能不输出任何东西,它可能会崩溃,或者可能做得更糟。

该代码段调用了未定义的行为。 结果可能是任何事情,从崩溃到意外输出。

正如其他人提到的那样,这是未定义的行为,因为它取决于位于str分配后的afrr后面的内存的内容。 它以ABCDE开头,但会变成随机的字节集合,这些字节转换为char或崩溃。

输出未定义。 在Linux中,我得到输出D,因为我认为存储在堆栈中的数据是从下到上的。 因此,ch存储在底部,str存储在其上方。 现在,您要用额外的两个字节覆盖str,这会导致ch变量损坏,这可能会导致将D显示为输出。 同样,这取决于您正在运行的编译器和操作系统。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM