qt QByteArray::data()亂碼

爲了貪方便

QString qstr("你好");
char *cstr = qstr.toLocal8Bit().data();   

上面獲取到的字符串指針所指內存已經被釋放,因爲QString::toLocal8Bit()所構造的QByteArray對象在賦值之後就被析構了,雖然獲得了該對象的data指針,但它已經隨着對象析構而釋放了
稍加修改,還是存在風險

QString qstr("你好");
QByteArray qbarr = qstr.toLocal8Bit();  //保證qbarr對象的生命期就可以保證字符串的內容有效
char *cstr = qbarr.data();     //一旦qbarr析構了,cstr也同時無效了

正確的做法應該是

QString qstr("你好");
char cstr[64];
memcpy(cstr, qstr.toLocal8Bit().data(), qstr.toLocal8Bit().size());
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章