为什么分配不相关的字符串会导致另一个字符串被修改?

时间:2016-11-16 15:12:10

标签: c++

下面的示例,我将fn作为指向常量c-string的const指针。当我声明并将不相关的其他const指针分配给不同的常量c-string时,原始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;
    }

1 个答案:

答案 0 :(得分:8)

const char* const fn = (baseString + "WithExtension").c_str();

这会导致未定义的行为。

baseString + "WithExtension"

这会创建一个临时的std::string对象。 +上的std::string运算符返回新的std::string,并且在此表达式的上下文中,返回的std::string成为临时对象。 c_str()返回指向此临时对象内部缓冲区的指针。

c_str()返回的指针仅在其std::string被修改或被销毁之前有效。在上面的表达式的末尾,临时对象被破坏。

稍后使用此指针会导致未定义的行为。