Почему вызов 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 разрушен, а почему?

Ответы на вопрос(3)

Ваш ответ на вопрос