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