当前位置: 代码迷 >> QT开发 >> ,QString转char时两个变量内容覆盖是咋回事
  详细解决方案

,QString转char时两个变量内容覆盖是咋回事

热度:241   发布时间:2016-04-25 03:04:47.0
求助,QString转char时两个变量内容覆盖是怎么回事?

我在做DES的加解密,这一段是出问题的部分,其他部分暂时删掉了。
明文p和密钥k以QString的形式传入des这个函数,再转成char[]分别赋给pt和key,输出key到文本框的时候发现pt的内容变成了key的内容,请问这是怎么回事啊?
------解决思路----------------------
注意: 你的 pt 和 key  都是野指针!
------解决思路----------------------
2楼说的是正确的.我再来详细解释一下吧.

pt=p.toLatin1().data();
key=k.toLatin1().data();

这两句里面都生成了一个临时变量,
p.toLatin1();和k.toLatin1()都生成了一个QByteArray类型的临时变量,这个临时变量并没有被保存下来,所以当这句话分号结束的时候,这个临时变量就被销毁了,它配的空间就被回收了.这里得到它的数据指针,指向的地址其实并不存在了.出现什么内容都是不确定的.

修改应该是这样的.就是把的临时变量保存下来.

QByteArray baP = p.toLatin1(); //保存临时变量
pt = baP.data();
QByteArray baK = k.toLatin1();
key= baK .data();

这样这里pt和key指针所指向的内存空间,在这个过程结束之前都会存在.

是这样的,建议把连续的表达式分割开来.一步一步的来.
比如很多时候为了方便会写很多长表达式.a.b.c.d.e.f.g = xxx;   或者 xxx = a.b.c.e.f.g;
这其实是很危险的,因为很多时候可能并不确定其中的某一个环节是否出问题.比如这里b是一个指针,那么它又是一个空指针的时候,这里就会出问题.
检查的时候也很难发现.
 不知是否是楼主需要的回答
  相关解决方案