c++ 求助,由以下程序可知,string类型的变量占32个字节空间,而一个字符占一个字节,下面程序name变量中

字符远超出32字节,为何程序不出错??
#include<iostream>
#include<string>
using namespace std;

int main()
{
int m=100;
cout<<"m="<<m<<endl;
cout<<"sizeof(m)="<<sizeof(m)<<endl;
string c(33,'*');
cout<<c<<endl;
cout<<"sizeof(c)="<<sizeof(c)<<endl;
string name;
name="thinking c++ don't touch her! she is my girl friend";
cout<<name<<endl;
cout<<"sizeof(name)="<<sizeof(name)<<endl;
system("pause");
return 0;
}

string库中的内存采用动态管理,可以自动增加内存,不会存在越界。当然如果把整个大文件的字符付给string类型的变量还是会越界的。你说的“string类型的变量占32个字节空间”是从“cout<<"sizeof(c)="<<sizeof(c)<<endl;
”得出来的结论吧?这是因为你前面的这个语句 string c(33,'*');
所以和后面定义的string name没关的...
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-31
string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。
sizeof(string)=4可能是最典型的实现之一,不过也有sizeof()为12、32字节的库实现。
相似回答