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

 

posted @ 2021-07-26 15:29  kongbursi  阅读(2505)  评论(0编辑  收藏  举报