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();

這樣寫比較好。

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

轉自:https://blog.csdn.net/u013383344/article/details/53379029


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM