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 *数组长度作为构造函数第二个参数