问一下.size , sizeof (),strlen , length的区别

定义string a=“sss”;
用. size 为3
sizeof是24
strlen是3
length是3
问一下为什么有的没有读\0,而且sizeof为24

#include
#include
using namespace std;
int main()
{
string a = "qqq";
cout << a.size(); //3
cout << sizeof(a);//28
cout << a.length();//3
//cout << strlen((char *)a);
cout << "sizeof(string)=" << sizeof(string) << endl;//28
return 0;
}
在VS2013下面运行 C++里面的String类的大小占28个字节

sizeof是string类对象的大小,其他是字符串长度

sizeof是字节大小,strlen是字符串长度,和length一样。字符串长度不包括\0

楼上正解 详情可以百度

1、size()是取字符串长度的,跟length()用法相同。
举例:
string str="0123456789";
cout <<"str.length()="<<str.length()<<endl;//结果为10
cout <<"str.size()="<<str.size()<<endl;//结果为10
为了兼容,这两个函数一样。 length()是因为沿用C语言的习惯而保留下来的,string类最初只有length(),引

入STL之后,为了兼容又加入了size(),它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL

的算法。 string类的size()/length()方法返回的是字节数,不管是否有汉字。

2、sizeof

sizeof(...)是运算符,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回

动态分配的内存空间的大小。
举例说明:
1)char* ss = "0123456789";
sizeof(ss)为4,ss是指向字符串常量的字符指针,sizeof 获得的是指针所占的空间,则为4
sizeof(*ss)为1,*ss是第一个char字符,则为1。

3.strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某

个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。
参考:http://blog.csdn.net/smf0504/article/details/51372351

4.C/C++ strlen(str)和str.length()和str.size()都可以求字符串长度。
其中str.length()和str.size()是用于求string类对象的成员函数
strlen(str)是用于求字符数组的长度,其参数是char*。