提问人:MrMiserMeister 提问时间:9/13/2023 更新时间:9/13/2023 访问量:46
两个不同的字符指针最终具有相同的值 [duplicate]
Two different char pointers end up with the same value [duplicate]
问:
我假设这是未定义的行为,但我不确定为什么?
当我用 g++ 4.4.7 编译上述代码并执行它时:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string A = "-A";
string B = "_B";
string common = "Common";
const char* commonA = (common + A).c_str();
const char* commonB = (common + B).c_str();
cout << commonA << endl;
cout << commonB << endl;
return 0;
}
结果显示 commonA 和 commonB 的计算结果均为“Common_B”。
我注意到,当我将相同的代码放入在线 c++ ide 中时,我得到了预期的结果,其中 commonA 是“Common-A”,commonB 是“Common_B”。因此,为什么我认为我正在做的是未定义的行为。
通过将字符串连接和 c_str() 调用分为两步,我能够获得原始代码片段,为我提供 g++ 4.4.7 中的预期行为。即:
string commonA_str = common + A;
string commonB_str = common + B;
const char* commonA = commonA_str.c_str();
const char* commonB = commonB_str.c_str();
这到底是怎么回事,有什么安全的方法呢?
谢谢!
答: 暂无答案
评论
(common + A)
(common + A).c_str()
;
(common + A)
std::string
std::string
c_str()
;