爲了貪方便
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());