这里写目录标题
size()和sizeof()
(1)size()用于取对象大小
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是运算符,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。
举例说明:
int main()
{
int a[5]={0,1,2,3,4};
int *b;
b=(int *)malloc(5*sizeof(int));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
printf("sizeof(a)=%d\n",sizeof(a));
printf("sizeof(b)=%d\n",sizeof(b));
printf("\n");
for(int i=0;i<5;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
printf("\n");
for(int i=0;i<5;i++)
{
printf("b[%d]=%d\n",i,b[i]);
}
return 0;
}
可以看到,sizeof(a)是20个字节,sizeof(b)是4个字节,也就是说sizeof(b)只是求出了指针b的大小。
strlen()和sizeof()
char str[20] = "hello";
printf("strlen: %d\n", strlen(str));
printf("sizeof: %d\n", sizeof(str));
[root@localhost 0703]# ./hello
strlen: 5
sizeof: 20
- sizeof是关键字,strlen是函数。
- sizeof计算的是数据类型占内存的大小,包括’\0’。而strlen计算的是字符串实际的长度,不包括\0。
- 编译器在编译时就计算出了sizeof的结果,而strlen函数必须在运行时才能计算出来。