字符和 int 连接何时会导致 seg 错误?

When does character and int concatenation result in seg fault?

本文关键字:seg 错误 何时会 int 连接 字符      更新时间:2023-10-16
#include <iostream>
#include <string>
using namespace std;
int main()
{
int number = 900;
cout << std::string("Hello, World!" + number) << std::endl;
return 0;
}

我知道正确的解决方案是使用std::to_string(number).但这里的问题是,为什么我没有出现分段错误?我什至通过瓦尔格林德运行它。字符串长度约为 13,我将指针移动 900。

表达式"Hello, World!" + number是添加到intconst char[]文字。前者衰减为const char*指针,您可以通过指针算术向其添加number

由于最后一个指针不在原始字符串常量中,因此将无效的const char*指针传递给std::string构造函数,并且程序的行为未定义。此时可能发生任何事情,包括运行时崩溃。积极优化的编译器可能会完全省略未定义的表达式;这种情况正变得越来越普遍。

繁荣!

如果你想将900连接到字符串,那么你可以写

std::cout << std::string("Hello, World!" + std::to_string(number)) << std::endl;