为什么分配一个不相关的字符串会导致另一个字符串被修改
Why did the assigning of an unrelated string cause another string to be modified?
在下面的例子中,我将fn作为指向常量c-string的const指针。当我声明并将一个不相关的其他const指针赋值给另一个常量c-string时,原始的fn被修改。我一直在试图弄清楚为什么有一段时间,但看不出是什么可能导致这个?
输出:原fn: samplestrwitheextension
修改fn: randomStr2ModifiedFn
int main() {
std::string baseString = "sampleStr";
std::string randomBaseString = "randomStr2";
const char* const fn = (baseString + "WithExtension").c_str();
std::cout << "Original fn: " << fn << std::endl;
const char* const variableNotFn = (randomBaseString + "ModifiedFn").c_str();
std::cout << "Modified fn: " << fn << std::endl;
return 0;
}
const char* const fn = (baseString + "WithExtension").c_str();
这会导致未定义的行为。
baseString + "WithExtension"
创建一个临时的std::string
对象。+
操作符在std::string
上返回一个新的std::string
,在这个表达式的上下文中,返回的std::string
成为一个临时对象。c_str()
返回一个指针,指向这个临时对象的内部缓冲区。
c_str()
返回的指针只有在std::string
被修改或被销毁之前才有效。在上述表达式的末尾,临时对象被销毁。
之后使用这个指针会导致未定义的行为
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 使用另一个字符串从字符串中删除空格
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 如何在使用 getch 后在另一个字符串的末尾连接一个字符串
- 如何在另一个字符串的x位置插入一个字符串?
- 从 C 字符串构造 std::string 与从另一个 std::string 构造 std::string 不一致
- C++:递归地将字符串中一个字母的所有实例替换为另一个字母
- 在另一个字符串中插入文件扩展名之前的字符串
- 使用C++将一个字符串替换为另一个字符串
- 将字符从一个字符串简单分配到另一个字符串不起作用
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 将字符串中的单个单词替换为另一个单词
- 将文本流中一个字符串的所有匹配项替换为另一个字符串
- 无法将字符串用作另一个类的参数
- 另一个字符串文字,UDL 迷宫
- 在给定字符串上使用 tolower() 和 isalpha() 并将其输出设置为另一个字符串
- 如何使用循环从另一个字符串创建一个没有空格的新字符串