QString s = "hello world"; qDebug() << s; qDebug() << s.toUtf8().data(); char* p = s.toUtf8().data(); qDebug() << p; QByteArray b = s.toUtf8(); p = b.data(); qDebug() << p; /* "hello world" hello world ????????????????? hello world */
為什么第三次輸出是亂碼?
toUtf8()這個函數調用返回了一個QByteArray類型的臨時變量,但是這個變量你沒有賦給左值,所以char* p = s.toUtf8().data();這一句執行完后,臨時的QByteArray就被析構了,那么指向它內部數據的指針也就成為野指針了。
char *轉換到QByteArray注意
char * content; QByteArray ba = QByteArray(content);
構造函數原型
QByteArray(const char *data, int size = -1)
構造包含數組數據的第一個大小字節的字節數組。
如果數據為0,則構造空字節數組。
如果size為負數,則假定數據指向以nul結尾的字符串,並動態確定其長度。終止nul字符不被視為字節數組的一部分。
QByteArray對字符串數據進行深度復制。
因為終止符null不被視為字節數組一部分,所以說就說出現結果不符合你的預期的效果,所以最好加上char *數組長度作為構造函數第二個參數