Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 以下代码段的输出应该是什么?为什么?_C - Fatal编程技术网

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

C 以下代码段的输出应该是什么?为什么?,c,C,以下代码段的输出应该是什么?为什么 #include <stdio.h> #include <string.h> int main() { char ch = 'A'; char str[3]; strcpy(str, "ABCDE"); printf("%c", ch); } #包括 #包括 int main() { char ch='A'; char-

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

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

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

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

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

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

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

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

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

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

,当然。这是前面几个问题的副本,尽管找到它们可能很棘手。当然,谁写了这个代码段以及为什么?这是前面几个问题的副本,尽管找到它们可能很棘手。谁写了这个代码段,为什么?