如果我说:
char g1[13] = "hello in c++ no";
char g2[13];
strcpy(g2, g1);
strcpy()
将 g1
复制到 g2
,这就是正常输出。但是,如果我将 g2
更改为较小的尺寸(例如 g2[7]
),它就会更改 g1
。
为什么 g1
会改变,即使它必须只改变 g2
?
您遇到了缓冲区溢出。您复制到
g2
中的数据超出了它所能容纳的数据。 strcpy()
不执行任何边界检查,因此在本例中它将超出 g2
的边界并写入周围的内存。因此,如果 g1
在记忆中遵循 g2
,则 可能会改变。编译器可以根据自己的需要自由地对局部变量进行排序。仅仅因为您在
g1
之前声明 g2
并不能保证 g2
在内存中遵循 g1
。