Dlaczego to działa: zwracanie literału C z funkcji std :: string i wywoływanie c_str ()

Niedawno mieliśmy wykład w college'u, gdzie nasz profesor opowiedział nam o różnych rzeczach, na które należy zwrócić uwagę podczas programowania w różnych językach. Oto przykład w C ++:

std::string myFunction()
{
    return "it's me!!";
}

int main(int argc, const char * argv[])
{
    const char* tempString = myFunction().c_str();

    char myNewString[100] = "Who is it?? - ";
    strcat(myNewString, tempString);
    printf("The string: %s", myNewString);

    return 0;
}

Pomysł, dlaczego to zawiedzie, jest takireturn "it's me!!" niejawnie wywołuje konstruktor std :: string z char []. Ten ciąg zostanie zwrócony z funkcji i funkcjic_str() zwraca wskaźnik do danych zstd::string.

Ponieważ ciąg zwracany przez funkcję nie jest odwoływany nigdzie, należy go natychmiast zwolnić. Taka była teoria.

Jednak uruchomienie tego kodu działa bez problemów. Byłoby ciekaw, co myślisz. Dzięki!

questionAnswers(9)

yourAnswerToTheQuestion