• 6253阅读
  • 6回复

[提问]救命!QT这是啥情况??? [复制链接]

上一主题 下一主题
离线herowufei
 

只看楼主 正序阅读 楼主  发表于: 2014-09-23
回复本帖可获得10RMB金钱奖励!
每人最多可获奖1次,奖池剩余40RMB金钱 (中奖几率30%)
我的客户端接收服务器传递过来的一段XML数据,服务器是GBK编码的,里面有中文,我接到后使用GBK翻译如图
然后看内存...
正确翻译过来..然后此时断点不走..等待几秒钟..再看...


又变乱码了...此时如果走断点...


程序崩了........

如果不设断点直接秒过...就不会蹦,但是数据错误的..求解.....好奇怪的现象....
离线tb1over

只看该作者 6楼 发表于: 2014-09-24
pszRet new出来,在哪去释放的。
离线dbzhang800

只看该作者 5楼 发表于: 2014-09-23
抛开debugger先不说,你这个函数本身就有bug。

1. 在 QString ==> char* 转换过程中,你假设二者长度一致,而且里面有非ASCII字符。这显然是要出问题的。

2. 你这个函数只能用于转换完整的gbk字符串,如果一个gbk字符串人为分两次进行转换,而分界点恰好在一个汉字的两个字节中间。也是要出问题的。

另外,uidab提到的,你将一个GBK编码的char * 经过QString 转成另一种编码的char *的意图是什么呢?
离线herowufei

只看该作者 4楼 发表于: 2014-09-23
我想问是不是调试器的问题????
离线herowufei

只看该作者 3楼 发表于: 2014-09-23
还有...不关memmove的事...只要连续看两次内存里strData的值...后面的代码只要操作了这个变量就必定报错....
离线herowufei

只看该作者 2楼 发表于: 2014-09-23
回 uidab 的帖子
uidab:我个人觉得还是有问题,不然是不会提示这个错误的。
你的pszDesc  是const char*  ,把它的内容转到QString,然后又把QString 转到char* pszRet。 是担心字符编码问题吗????
有没有可能是memmove中某个参数的问题??
....... (2014-09-23 17:27) 

pszDesc是服务器返回的数据,它是GBK编码的,在QT上显示是乱码,所以必须用m_pCoderQt->toUnicode(pszDesc);转换成Unicode编码的形式,这样就能正确显示中文了...但是奇怪的是只要断点停在那里然后连续看两次内存,,,第一次正确显示,第二次内存里的值也变乱码...之后再执行下面的操作必定报错....我都晕了....如果不去看内存的值就没问题,但是得到的东西还是乱码
离线uidab

只看该作者 1楼 发表于: 2014-09-23
回帖奖励+ 10
我个人觉得还是有问题,不然是不会提示这个错误的。
你的pszDesc  是const char*  ,把它的内容转到QString,然后又把QString 转到char* pszRet。 是担心字符编码问题吗????

有没有可能是memmove中某个参数的问题??


有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
快速回复
限100 字节
 
上一个 下一个