我正在做上一年的C编程考试。我想到了这个:
一个程序(见下文)定义了两个变量x和y。
它产生给定的输出。解释为什么字符“ A”出现在变量x的输出中。
程序:
#include <stdio.h>
main ()
{
char x[6] = "12345\0";
char y[6] = "67890\0";
y[7]='A';
printf("X: %s\n",x);
printf("Y: %s\n",y);
}
Run Code Online (Sandbox Code Playgroud)
程序输出:X:1A345 Y:67890
它有很高的分数(7)。而且我不知道如何详细解释。我的答案是:
char数组(y)仅分配了6个char,因此更改第7个字符将更改堆栈中的第2个字符。
任何帮助将不胜感激!(我只有一年级)
您的正式答案应该是该程序产生未定义的行为。
C语言标准未定义越界访问操作的结果。
使用char y[6],通过从中读取或写入y[7],这就是您正在执行的操作。
一些编译器可能选择在堆栈中的数组x[6]之后立即分配数组y[6]。
因此,通过编写'A'成y[7],这个计划可能确实写'A'成x[1]。
但是该标准没有规定,因此取决于编译器的实现。
正如其他人暗示的那样,如果您的问题确实是在正式考试中给出的,那么您可能要考虑在其他地方继续学习...