字符串“ hello,world”在内存中释放时,占用(13)个字节。请问怎样用sizeof编写出程序算出来?

这道题我编写的程序是:
#include<iostream>
#include<string>
using namespace std;
void main()
{
string s1("hello,world");
cout<<sizeof(s1)<<endl;
}
结果算出来是16,怎么回事?请高手解释一下原因,好吗?并且写出正确的程序算法!

这个sizeof获得是类string占用的字节数,跟他的值是无关的。
即使你把string s1("hello,world123456788899999");,sizeof(s1)也还是16。等价于sizeof(string)。
要获得s1的长度,可以使用s1.length();追问

可是改为s1.length()后,结果算出的是1!这是怎么回事啊?

追答

应该是11吧。这个我试了。
#include
#include
using namespace std;
void main()
{
string s1("hello,world");
cout<<s1.length()<<endl;
}

追问

那也不对啊,争取的答案应该是13啊!怎么回事啊?

追答

hello,world不是正好是11个字节码?你为什么要得到是13呢?释放时时13,是因为有结尾符的原因。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-30
首先你要弄清楚sizeof是用来求类型的字节数的。
所以不管你给S赋多长的字符串,sizeof(s)始终是16,因为string 类型的长度是16.
可以改成:
#include "stdafx.h"
#include<iostream>
#include<string>

using namespace std;
int main(int argc, char* argv[])
{
string s;
s="Hello,world.";
cout<<s.length()<<endl;
return 0;
}
第2个回答  2011-07-06
如果是 char str[] = 占12个字节
如果是 char str[] =

就占用 11 个字节
最后那个'\0' 最好加上, 不然 printf("%s", str)可能会出问题。
另外,站长团上有产品团购,便宜有保证
第3个回答  2011-06-30
试试s1.sizeof()
相似回答