这段代码段的输出结果是什么?为什么?
问题描述:
以下代码段的输出应该是什么?为什么?这段代码段的输出结果是什么?为什么?
#include <stdio.h>
#include <string.h>
int main()
{
char ch = 'A';
char str[3];
strcpy(str, "ABCDE");
printf("%c", ch);
}
答
这个程序的输出可以是任何东西,因为你缓冲区溢出str
,并得到了一个未定义的行为。事实上,该程序可能不会输出任何内容,可能会崩溃,或者可能会做得更糟。
答
该片段调用未定义的行为。结果可以是任何事情,从崩溃到意外输出。
答
正如其他人所提到的,这是未定义的行为,因为它取决于分配给str
的任何位置的内存的内容。它将从ABCDE
开始,但会随机转换为转换为字符或崩溃的随机字节集合。
答
输出未定义。在Linux中,我得到输出D,因为我认为从下到上存储在堆栈中的数据。所以ch存储在底部,str存储在它的上面。现在你用另外两个字节覆盖str,这会导致ch变量被破坏,这可能导致显示D作为输出。同样,这取决于您正在运行的编译器和操作系统。
[鼻恶魔](http://www.catb.org/jargon/html/N/nasal-demons.html),当然。 – dmckee 2011-03-04 05:06:23
这是以前几个问题的重复,但找到它们可能会很棘手。 – dmckee 2011-03-04 05:08:46
谁写了这段代码片段,为什么? – Blastfurnace 2011-03-04 06:03:49