• 354阅读
  • 8回复

[提问]__FELE__引起的qdebug显示问题?? [复制链接]

上一主题 下一主题
离线caiwei_cs
 

只看楼主 倒序阅读 楼主  发表于: 04-12
  1. QString name("name111");
  2.     qDebug()<<__FILE__<<name.toLatin1().data();
  3.     char *p1 = name.toLatin1().data();
  4.     char c = *(char*)(p1);
  5.     qDebug()<<p1;
  6.     qDebug()<<__FILE__<<p1<<c;

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

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

只看该作者 1楼 发表于: 04-12
自己顶一下。
离线马侬骑士

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

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

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

只看该作者 5楼 发表于: 04-12
手机回复提示错误多点了几下,尴尬了
离线caiwei_cs

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

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

只看该作者 7楼 发表于: 04-13
最后一个p1 是一个 char ,  不是一个 char* ~~~
当然只打印一个字符

所以没有错吧~~~
离线caiwei_cs

只看该作者 8楼 发表于: 04-17
谢谢大家
快速回复
限100 字节
 
上一个 下一个