QString.toUtf8().data()的問題 & char *轉換到QByteArray注意


        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 *數組長度作為構造函數第二個參數

 


免責聲明!

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



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