QString转换为char*需要注意的问题

本文解析了将QString转换为char*过程中常见的错误做法,并给出了正确的实现方式。指出直接使用QString toLatin1()方法返回的临时QByteArray可能导致内存访问异常,强调了存储临时QByteArray的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


将QString转换为char*的过程中有一种错误用法需要注意:

QString  strName = "Hello world!";

char *p = strName.toLatin1().data();

 qDebug() << p;


此时输出为乱码,这是为什么呢?


因为QString 的 toLatin1() 返回的为一个临时的QByteArray,而直接用这个临时的QByteArray 的data()方法返回的自然是一个临时的指针,

在当前行执行完毕临时的区域就会销毁了,所以p指向的内容也就销毁了


正确的写法是:

QString  strName = "Hello world!";

QByteArray array = strName.toLatin1();

char *p = array.data();

 qDebug() << p;

需要将这个临时的QByteArray储存起来。


参考文档:http://www.4byte.cn/question/561018/clean-way-to-convert-qstring-to-char-not-const-char.html


欢迎指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值