C++ strcpy() 函数更改从中复制的字符串

问题描述 投票:0回答:1

如果我说:

char g1[13] = "hello in c++ no"; 
char g2[13];
strcpy(g2, g1);

strcpy()
g1
复制到
g2
,这就是正常输出。但是,如果我将
g2
更改为较小的尺寸(例如
g2[7]
),它就会更改
g1
。 为什么
g1
会改变,即使它必须只改变
g2

c++ function variables strcpy
1个回答
0
投票

您遇到了缓冲区溢出。您复制到

g2
中的数据超出了它所能容纳的数据。
strcpy()
不执行任何边界检查,因此在本例中它将超出
g2
的边界并写入周围的内存。因此,如果
g1
在记忆中遵循 g2,则
可能
会改变。编译器可以根据自己的需要自由地对局部变量进行排序。仅仅因为您在
g1
之前声明
g2
并不能保证
g2
在内存中遵循
g1

© www.soinside.com 2019 - 2024. All rights reserved.