1. 程式人生 > >Qt中QString::toStdString().c_str() 偶爾存在問題

Qt中QString::toStdString().c_str() 偶爾存在問題

假設

QString str = "string";

const char* c = str.toStdString().c_str()單步除錯顯示的結果可能會是'\0'

而當我這樣寫時

std::string s = str.toStdString(); 

const char* c = s.c_str();

 c 是"string"

為啥呢???

原來有可能是這樣的。

str.toStdString().c_str()中toStdString()是一個臨時std::string變數,而c_str()是指向這個臨時std::string變數的字串地址,所以傳給c時這個臨時std::string

變數已經被析構,其內容是空,c_str()自然就是'\0'。不過這種情況在未知情況下發生,有時直接寫QString::toStdString().c_str() 也是好用的。

為了避免出錯,最好還是

std::string s = str.toStdString(); 

const char* c = s.c_str();

這樣寫比較好。

多寫幾個字,少出點錯,下次記住了!!