【发布时间】:2022-09-22 22:37:50
【问题描述】:
代码成功编译它,但我不明白为什么对于某些数字值,程序崩溃而对于其他值却没有。有人可以解释使用编译器使用的char* 添加long int 的行为吗?
#include <iostream>
int main()
{
long int number=255;
std::cout<< \"Value 1 : \" << std::flush << (\"\" + number) << std::flush << std::endl;
number=15155;
std::cout<< \"Value 2 : \" << std::flush << (\"\" + number) << std::flush << std::endl;
return 0;
}
试验结果:
Value 1 : >
Value 2 : Segmentation fault
注意:我不是在寻找如何添加带数字的字符串的解决方案。
-
这肯定有重复
-
直觉上我会说
\"\"返回一个空字符串的第一个元素的地址;然后将number添加到该地址;然后operator<<尝试取消引用该新地址以读取字符串,这是未定义的行为。 -
骗子解释了当您添加
char时会发生什么。你的情况更简单,因为char首先被提升为int。 -
要更直观地解释这种现象:将
\"\"替换为\"Hello, World!\",将number=255;替换为number=7; -
@stef 感谢您的解释解决了我的问题