QString转化为const char *出现乱码问题

     对于Qt项目开发中,常常会遇到QString和const char*的转化问题,Qt也提供了响应的API接口,可以把QString转化为QByteArray,然后再转化为const char *,具体代码如下:

QString string("helloWorld");
const char *str = string.toLatin1().data();

    但是调用接口才发现,打印str时有时能够显示得到helloWorld有时候得到的却是乱码,通过查询文档发现调用toLatin1的过程中是把QString中的内容放到QByteArray中存储起来,如果再调用data的接口,放到QByteArray中的数据则会被清除(类似于栈变量析构),因此将上述代码变化一下则可以正确转化:

QString string("helloWorld");
QByteArray array = string.toLatin1();
const char *str = array.data();

    但是存在一个问题,如果是这样的场景,如果const char*存在的生命周期比QByteArray要长的话,还是会出现const char*中的数据会被释放,const char*的数据乱码的情况,解决的方法可以额外深拷贝出一份数据保存下来或者用一个数组保存数据(如果是在对象中,将数组定义成成员变量就行了)

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值