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!