2017-02-12 1 views
-1

Rückkehr habe ich den nächsten Code:Zwei verschiedene behaveiors wenn ein int oder string.c_str() aus einer Funktion CPP

const char* justReturn() 
{ 
    std::string s = "rstring"; 
    return s.c_str(); 
} 

int justReturnI() 
{ 
    int x = 5; 
    return x; 
} 


int main() 
{ 

    const char* result = justReturn(); 
    int result2 = justReturnI(); 
    std::cout << result <<std::endl; 
    std::cout << result2; 
    std::cin.get(); 
    return(0); 
} 

Der Ausgang der ersten Funktion eill eine seltsame Zeichenfolge sein, während die zweite wird gibt mir '5'.

Warum seltsame Zeichen ausgedruckt? Ich habe die Zeichenfolge nicht zurückgegeben, die kurz nach dem Ende des Bereichs gestorben ist. Ich habe einen neuen Const Char zurückgegeben.

+0

Aber der Zeiger zeigt auf den toten String. –

+1

[undefiniert Verhalten?] (Http://coliru.stacked-crooked.com/a/c6e6c3496e689c92) –

+0

http://en.cppreference.com/w/cpp/string/basic_string/c_str - * Rückgabewert: Zeiger auf der zugrunde liegende Zeichenspeicher. * – chris

Antwort

1

Das passiert, weil die Zeichenfolge std::string s = "rstring"; lokal für den Gültigkeitsbereich der Funktion ist und Sie einen Zeiger auf ein Objekt zurückgeben, das zerstört wurde, wodurch ein dangling-reference erstellt wird. Deshalb erhalten Sie ein unerwartetes Ergebnis.

Verwandte Themen