我写了以下c程序:
PyObject*
为什么当我在输入程序中输入“bye”打印“helby”时? 我认为'b'应保存在[0]中,'y'保存在b [0]中,'e'保存在b [1]中。 谢谢你的建议!
答案 0 :(得分:1)
您认为a
内存后紧跟b
。情况不一定如此。
读取/写入数组的末尾是undefined behavior,因此编译器可以按他们选择的任何顺序自由排列局部变量。
在我的特定计算机上,如果在b
之前声明a
,那么a
就会出现在内存中的b
之前,我会得到您期望的输出。但是,正如您可以从其他答案和注释中看到,由于未定义的行为,行为不可靠。
答案 1 :(得分:1)
为什么当我给" bye"输入程序打印" helby"?
在程序中,您尝试在此循环中超出数组a[]
的范围进行访问:
for(i = 0; (c = getchar()) != EOF; i++)
a[i] = c; //only defined behaviour for `i = 0`
例如,当您提供bye
作为输入时,
a[0] -> overwritten with b
a[1] -> undefined behaviour as you are accessing out of bounds
a[2] -> same as a[1]
在这里,您可以看到b[]
数组无处可更改。
导致未定义的行为。所以你的输出可以是任何(从无到有)