Неожиданный вывод при использовании const_cast & lt; & gt;

Я написал ниже код моей машины (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;
}

Я ожидаю выход как
Привет, мир!

1

Решение

Когда ты сказал string("Hello ") без сохранения этой строки строка может быть уничтожена в конце выражения, которое ее создает.

Вы берете указатель на память, которой владела эта уничтоженная строка, которая может сохранять или не сохранять значение "Hello " в течение некоторого времени после этого, но не определено, произойдет ли это или как долго.

Это работает только на вашей машине, потому что иногда «неопределенное поведение» означает «похоже, что это работает». 🙂

7

Другие решения

Других решений пока нет …