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] ={0};
memcpy(cstr, qstr.toLocal8Bit().data(), qstr.toLocal8Bit().size());  //注意,QByteArray::size()不包含终止符,要不初始化cstr为0,要不qstr.toLocal8Bit().size()+1

你可能感兴趣的:(QT)