Почему вызов std :: string.c_str () для функции, которая возвращает строку, не работает?
У меня есть следующий код:
std::string getString() {
std::string str("hello");
return str;
}
int main() {
const char* cStr = getString().c_str();
std::cout << cStr << std::endl; // this prints garbage
}
Я думал, что это произойдетgetString()
вернеткопия изstr
(getString()
возвращает по значению); Таким образом, копияstr
останется "живым" вmain()
до тех порmain()
возвращается. Это сделало быcStr
указать на правильное место в памяти: основнойchar[]
или жеchar*
(или что-то еще) копииstr
вернулсяgetString()
который остается вmain()
.
Однако это, очевидно, не тот случай, поскольку программа выводит мусор. Итак, вопрос в том, когдаstr
разрушен, а почему?