查看完整版本: [-- __FELE__引起的qdebug显示问题?? --]

QTCN开发网 -> Qt基础编程 -> __FELE__引起的qdebug显示问题?? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

caiwei_cs 2017-04-12 11:42

__FELE__引起的qdebug显示问题??

  1. QString name("name111");
        qDebug()<<__FILE__<<name.toLatin1().data();
        char *p1 = name.toLatin1().data();
        char c = *(char*)(p1);
        qDebug()<<p1;
        qDebug()<<__FILE__<<p1<<c;

输出为:
../ft/main.cpp name111
name111
../ft/main.cpp   n

为什么输出的时候因为有宏__FILE__
qDebug()<<p1;
qDebug()<<__FILE__<<p1<<c;
会引起p1显示不出来的情况?

caiwei_cs 2017-04-12 15:28
自己顶一下。

马侬骑士 2017-04-12 15:44
p是个地址,你打印的是个地址值
你直接将qstring转换为latin1这个返回的是临时变量,你没有找变量存储,这个临时变量就消失了,你的地址值就是野值了
定义一个临时变量qbytearray  s1存储latin1的值再用s1.data()返回char指针,就没有问题了

马侬骑士 2017-04-12 15:44
p是个地址,你打印的是个地址值
你直接将qstring转换为latin1这个返回的是临时变量,你没有找变量存储,这个临时变量就消失了,你的地址值就是野值了
定义一个临时变量qbytearray  s1存储latin1的值再用s1.data()返回char指针,就没有问题了

马侬骑士 2017-04-12 15:44
p是个地址,你打印的是个地址值
你直接将qstring转换为latin1这个返回的是临时变量,你没有找变量存储,这个临时变量就消失了,你的地址值就是野值了
定义一个临时变量qbytearray  s1存储latin1的值再用s1.data()返回char指针,就没有问题了

马侬骑士 2017-04-12 15:46
手机回复提示错误多点了几下,尴尬了

caiwei_cs 2017-04-13 08:41
马侬骑士:p是个地址,你打印的是个地址值
你直接将qstring转换为latin1这个返回的是临时变量,你没有找变量存储,这个临时变量就消失了,你的地址值就是野值了
定义一个临时变量qbytearray  s1存储latin1的值再用s1.data()返回char指针,就没有问题了
 (2017-04-12 15:44) 

这个临时变量的问题我搞明白了。但是为什么有一句,可以qDebug()<<p1;,有一句不行qDebug()<<__FILE__<<p1<<c;?
是因为偶然原因,第一句的时候临时变量的地址没有被覆盖么?

圣域天子 2017-04-13 10:49
最后一个p1 是一个 char ,  不是一个 char* ~~~
当然只打印一个字符

所以没有错吧~~~

caiwei_cs 2017-04-17 14:26
谢谢大家


查看完整版本: [-- __FELE__引起的qdebug显示问题?? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled