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

Why did the assigning of an unrelated string cause another string to be modified?

本文关键字:字符串 另一个 修改 不相关 分配 一个 为什么      更新时间:2023-10-16

在下面的例子中,我将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被修改或被销毁之前才有效。在上述表达式的末尾,临时对象被销毁。

之后使用这个指针会导致未定义的行为

相关文章: