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

时间:2011-03-04 05:04:27

标签: c

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

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

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

正如其他人所提到的,这是未定义的行为,因为它取决于分配str的位置的内存的内容。它将从ABCDE开始,但会运行转换为字符或崩溃的随机字节集合。

答案 3 :(得分:0)

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