string的大小

zmfbird 2009-03-23
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main(int argc,char* argv[])
{
	//to output "TrendMicrosoftUSCN"
	string strArr1[]={"Trend","Micro","soft"};
	string *pStrArr1=new string[2];
	pStrArr1[0]="US";
	pStrArr1[1]="CN";
	cout<<"strArr1:"<<sizeof(strArr1)<<endl;
                cout<<"string:"<<sizeof(string)<<endl;
	cout<<"pStrArr1:"<<sizeof(pStrArr1)<<endl;
	for(int i=0;i<sizeof(strArr1)/sizeof(string);i++)
		cout<<strArr1[i];
	for(int j=0;j<2*sizeof(pStrArr1)/sizeof(string);j++)
		cout<<pStrArr1[j];
	return 0;
}

 在vs2008中sizeof(strng)输出为32,但是在程序源面试宝典中给出的答案是4

 上面给出的这段代码书中说是正确代码。但我运行的不对,因为pStrArr1是指针,大小是4,string大小是32,所以第2个for循环不执行。

是书中错了吗?

bohemia 2009-03-24
GCC编译运行sizeof(string) == 4 
zhangyafei_kimi 2009-03-25
C++标准从来没有规定basic_string的大小.不同实现有不同大小.

看看这个,就知道string的实现原来有这么多变化的地方
http://complement.sourceforge.net/compare.pdf
Liweihua 2010-05-19
各种编译器内部有不同的实现
刘长鸣 2011-06-08
我在VC6.0中运行,string大小16
Global site tag (gtag.js) - Google Analytics