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