Aşağıdaki kod var:Neden bir dizeyi döndüren bir işlevde std :: string.c_str() çağrısı çalışmıyor?
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
}
Ne olacağını düşündüm getString()
bir kopyasını str
(değeriyle getString()
getiri) ait iade edeceğini olduğu; Bu nedenle, str
kopyası, main()
içinde main()
döndürene kadar "canlı" kalır. Bu, cStr
noktasını geçerli bir bellek konumuna getirir: veya char*
(ya da her neyse) tarafından 1 tarafından döndürülen içinde kalır. Bununla birlikte, program çıktı olarak çöp çıktığında, durum böyle değil. Yani, soru, ne zaman str
imha edildi ve neden?
Kodunuz benim için çalışıyor. –
@PriyanshGoel Tanımsız davranış bazen böyle. –
Tanımlanamayan davranış neden elde edemiyorum. –