C++输入int型整数输出变为256 代码运行异常原因问询
问题原因说明
核心问题是栈缓冲区溢出覆盖了相邻变量的内存,具体推导如下:
- 你定义的
char b[3]仅能容纳2个有效字符+1个字符串结束符\0,当你输入3位字符385时,cin会自动在输入内容末尾追加\0,总共需要4字节存储空间,超出了b数组的容量,发生越界写入。 - 同作用域内的局部变量按定义顺序反向存放在栈内存中,先定义的
int a地址高于后定义的b数组,b数组越界写入的第4个字节(也就是\0)刚好落在a的最低有效字节的内存地址上。 - 你输入的a初始值472对应的十六进制为
0x000001D8,小端模式下最低有效字节存储的是0xD8,被\0(值为0x00)覆盖后,a的取值变为0x00000100,转换为十进制就是256,和你观察到的输出结果完全一致。
修复方案
- 将
char b[3]修改为char b[4],预留足够空间存储3位字符加结束符。 - 更推荐直接使用
std::string类型存储字符串,无需手动管理容量,从根源上避免越界问题。
内容的提问来源于stack exchange,提问作者Kimpro。
相关产品推荐
相关产品推荐

