一个toLocal8Bit错误使用

最近在写Qt程序,用到了QString类的toLocal8Bit方法,写法如下:

const char* pStr = str.toLocal8Bit().data();
fun(pStr); 

结果并没有得到自己想要的答案,看起来使用挺简单的,也没啥错误啊,咋就是不对呢,想不通,第一反应就是去百度吧,好在有不少人也和我一个档次,很愉快地搜到了答案:

fun(str.toLocal8Bit().data());

理由也给出来了,就是toLocal8Bit()返回的是一个QByteArray临时对象,然后pStr保存了临时对象的地址,当然就不对了,这个大部分人都能看懂,没问题。
重点不是这个,重要的是自己当时为啥没有第一反应去思索哪里不对,而是首先想到了百度呢。其实只要稍微思考下,一个函数返回了指针,要么就是堆上,要么就是栈上。第一种写法,我们默认返回的指针就是在堆上,否则肯定会报错,但是该函数返回的指针在堆上的话,那跑不了是要自己释放的,但是去QString类中并没有提供类似的方法,所以推测返回的是栈上的指针。然后自己尝试下第二种写法,就能很快找出问题的所在。
从这个使用问题来看,很多东西并不能用不熟悉来做借口,或者说看到不熟的总是害怕,很多东西背后的原理都是相通的,只要简单地多思考一步,就能知道背后的原因所在了。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值