Qt中QString::toStdString().c_str() 偶爾存在問題
阿新 • • 發佈:2019-02-09
假設
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();
這樣寫比較好。多寫幾個字,少出點錯,下次記住了!!