• 14263阅读
  • 6回复

QString中字节长度问题 [复制链接]

上一主题 下一主题
离线yangfanxing
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-04
const QString fileNames[]={"asdfghjkl","2","3","4","5","6"};
         qDebug()<<"size"<<sizeof(fileNames[0]);  //4
         qDebug()<<"QString"<<fileNames[0];  //asdfghjkl
我要问的是:sizeof(fileNames[0]);输出的是一个QString的长度,所以应该是4;

可是fileNames[0]存储的是“asdfghjkl”,9个字节,那么为什么可以用4个字节的长度存储9个字节的东西呢???菜鸟了,大家回答下~~~
PHPWind好恶心。。。不想看这种界面。。。
离线dbzhang800

只看该作者 1楼 发表于: 2009-11-04
不妨找本C或C++本书,看看sizeof这个操作符的含义吧


“sizeof(fileNames[0]);输出的是一个QString的长度”
你在哪儿看的这种说法呢?
离线yangfanxing
只看该作者 2楼 发表于: 2009-11-05
引用第1楼dbzhang800于2009-11-04 22:11发表的  :
不妨找本C或C++本书,看看sizeof这个操作符的含义吧
“sizeof(fileNames[0]);输出的是一个QString的长度”
你在哪儿看的这种说法呢?


可能我肤浅了。。。可是事实验证了是这个结果的。。。
PHPWind好恶心。。。不想看这种界面。。。
离线wd007

只看该作者 3楼 发表于: 2009-11-05
1楼说的是对的,sizeof(fileNames[0]); 获取的并不是QString的长度。
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线dbzhang800

只看该作者 4楼 发表于: 2009-11-05
引用第2楼yangfanxing于2009-11-05 21:28发表的  :
可能我肤浅了。。。可是事实验证了是这个结果的。。。


汗,你自己都说了,你的字符串长度是9, sizeof 返回的结果4. 哪儿来的事实正是 sizeof返回的字符串的长度呢?

还是哪句话,找点 C++  的 sizeof 的资料好好看看吧。

无论你的 QString 里放多长的字符串,它的sizeof都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof无关。
另外 sizeof 是C/C++操作符,尽管它很像一个函数。

  1. QString a;
  2. qDebug()<< sizeof a << sizeof(QString);


如果你去看QString源码,你会发现它非常复杂,有非常多的成员函数,有static成员变量。但是它没有虚函数,而且只有一个非 static 的成员变量还是一个指针( Data *d;)。所以问题就简单了 sizeof a的大小就是 sizeof d的大小,在32位机器上,指针长度一般都是4,这也是你看到的结果。
离线hiti_tony
只看该作者 5楼 发表于: 2009-11-06
4 楼正解!
用sizeof得到的是QString对象的长度,QString里面只有一个指针,所以长度就是4了,你要得到它指向内容的字符个数就用QString::size()函数,由于QString默认是unicode,内容的字节数就是2乘以字符个数。
离线yangfanxing
只看该作者 6楼 发表于: 2009-11-20
谢谢各位,补足了知识了~
PHPWind好恶心。。。不想看这种界面。。。
快速回复
限100 字节
 
上一个 下一个