1

我在下面编写了我的机器(devcpp)和codepad.org的代码,但我的匹配工作正常,并且在codepad.org(http://codepad.org/XfW5a8en)上输出是一个垃圾字符。

   #include <iostream>
    #include<cstring>
    using namespace std;
    int main () {
        char *str1 =const_cast<char*>(string("Hello ").c_str());
        char *str2 = const_cast<char*>(string("World!").c_str());
        char *ptr = str1;
        char *&rptr = str1;
        rptr = str2;
        std::cout << ptr << str1 << std::endl;
    }

我期待输出为 Hello World!

4

1 回答 1

7

当您说不string("Hello ")将其存储在任何地方时,该字符串可以在创建它的表达式的末尾被销毁。

您正在获取一个指向该已破坏字符串所拥有的内存的指针,该内存可能会或可能不会在"Hello "之后的一段时间内保持 的值,但不确定是否会发生这种情况或持续多长时间。

它只在你的机器上工作,因为有时“未定义的行为”意味着“看起来它有效”。:-)

于 2013-04-02T11:55:42.113 回答