gpt4 book ai didi

奇怪的数组覆盖

转载 作者:行者123 更新时间:2023-11-30 20:11:38 26 4
gpt4 key购买 nike

我编写了以下 C 程序:

int main() 
{
char a[1];
char b[6]="hello\0";
int c, i;

for(i = 0; (c = getchar()) != EOF; i++)
a[i] = c;
for(i = 0; i < 5; i++)
printf("%c", b[i]);

}

为什么当我在输入中给出“bye”时,程序打印“helby”?我认为'b'应该保存在a[0]中,'y'应该保存在b[0]中,'e'应该保存在b[1]中。谢谢您的建议!

最佳答案

您假设内存中 a 后面紧跟着 b。情况不一定如此。

读取/写入超出数组末尾的是 undefined behavior ,因此编译器可以按照他们选择的任何顺序自由排列局部变量。

在我的特定机器上,如果 ba 之前声明,则 a 出现在 b 之前内存,我得到你期望的输出。但是,正如您从其他答案和评论中看到的那样,由于未定义的行为,行为不可靠。

关于奇怪的数组覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39964746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com