以下代码段的输出应该是什么?为什么?
#include <stdio.h>
#include <string.h>
int main()
{
char ch = 'A';
char str[3];
strcpy(str, "ABCDE");
printf("%c", ch);
}
答案 0 :(得分:8)
此程序的输出可能是任何内容,因为您超出缓冲区str
并获得未定义的行为。实际上,程序可能不会输出任何内容,它可能会崩溃,或者它可能会做更糟糕的事情。
答案 1 :(得分:1)
该代码段调用未定义的行为。结果可以是任何事情,从崩溃到意外输出。
答案 2 :(得分:1)
正如其他人所提到的,这是未定义的行为,因为它取决于分配str
的位置的内存的内容。它将从ABCDE
开始,但会运行转换为字符或崩溃的随机字节集合。
答案 3 :(得分:0)
输出未定义。在linux中,我得到输出D因为我认为数据从下到上存储在堆栈中。因此,ch存储在底部,str存储在它的正上方。现在你用额外的两个字节覆盖str,这导致破坏ch变量,这可能导致显示D作为输出。同样,这取决于您运行的编译器和操作系统。