我在下面写了代码我的机器(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!
答案 0 :(得分:7)
当你说string("Hello ")
而不将它存储在任何地方时,字符串可以在创建它的表达式的末尾被销毁。
您正在使用指向该被破坏字符串所拥有的内存的指针,该字符串可能会或可能不会保留"Hello "
的值一段时间之后,但不确定是否会发生这种情况,或者多久。
它仅适用于您的计算机,因为有时“未定义的行为”意味着“看起来像它有效”。 : - )