Warum funktioniert das? C-String-Literal von der Funktion std :: string zurückgeben und c_str () aufrufen

Wir hatten kürzlich eine Vorlesung am College, in der unser Professor uns über verschiedene Dinge erzählte, die wir beim Programmieren in verschiedenen Sprachen beachten sollten. Das Folgende ist ein Beispiel in 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;
}

Die Idee, warum dies fehlschlagen würde, ist die folgendereturn "it's me!!" Ruft implizit den Konstruktor std :: string mit einem char [] auf. Diese Zeichenfolge wird von der Funktion und der Funktion zurückgegebenc_str() gibt einen Zeiger auf die Daten aus dem zurückstd::string.

Da die von der Funktion zurückgegebene Zeichenfolge nirgendwo referenziert wird, sollte die Zuordnung sofort aufgehoben werden. Das war die Theorie.

Das Ausführen dieses Codes funktioniert jedoch problemlos. Wäre gespannt was du davon hältst. Vielen Dank!

Antworten auf die Frage(9)

Ihre Antwort auf die Frage