[英]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.