假設
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