【发布时间】:2016-11-16 15:12:09
【问题描述】:
下面的示例,我将 fn 作为指向常量 c 字符串的 const 指针。当我声明一个不相关的其他 const 指针并将其分配给不同的常量 c 字符串时,原始 fn 被修改。我一直在尝试找出原因,但看不出是什么原因造成的?
输出:
原始 fn:sampleStrWithExtension
修改后的 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;
}
【问题讨论】:
-
fn = (baseString + "WithExtension").c_str()不是一个非常危险的任务。由表达式baseString + "WithExtension"创建的string对象在此赋值完成后立即销毁,使变量fn指向未分配的内存,可以随时重用。 -
x.c_str()的生命周期永远不会超过x的生命周期。
标签: c++