sizeof和strlen区别

1)strlen()是函数,用于计算字符串数组的实际长度(到‘\0’结束,不包含‘\0');strlen只能用于计算char *a或char a[]格式的,不能用于计算string类型

 1 #include<iostream>
 2 using namespace std;
 3 void main()
 4 {
 5 char a[10];   //未初始化,长度不确定
 6 char b[10]={};  //初始化为’空,NULL;长度为0,
 7 char c[10]="abc";  //遇到’\0‘结束,实际长度为3
 8 char d[10]="abc\0def";   //遇到’\0‘结束,实际长度为3
 9 char *e="abc";  //遇到’\0‘结束,实际长度为3
10 cout<<strlen(a)<<" "<<strlen(b)<<" "<<strlen(c)<<" "<<strlen(d)<<" "<<strlen(e);
11 }

输出结果:

注:string 类型数据

 

string str="abc";
strlen(str);   //error,strlen不能用于string类型
str.size(); /*ok,string自带函数,计算实际包含的字符长度,长度为3.注意,size()不是根据结尾有无‘\0'来实现的,可以定义一个string类型的迭代器it,以it==str.end()为截至条件进行计算*/

2)sizeof是操作符,计算的是所占内存的实际长度,单位是字节,可用于常量,变量,数据类型,函数,sizeof是基于数据类型来计算长度的

  • 常量:

      a.对于数字类型的常量,sizeof计算的是该数字所属数据类型的长度,如:

sizeof(2)  //2是int类型,长度为4
sizeof(2.1)  //2.1是double类型,长度为8

b.对于字符串类型的常量,sizeof计算的是所有字符的长度,包括‘\0’,如

sizeof("abc")        //包含4个char类型的字符,包括末尾隐含的'\0',char类型长度为1,总长度为4
sizeof("abc\0def")  //长度为8,包含8个char类型的字符,将‘\0'作为普通字符,char类型长度为1,总长度为8

 

  • 变量:
 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 void main()
 5 {
 6 char a[10];      //char类型长度为1,包含10个char类型的数组长度为10
 7 char b[10]={};
 8 char c[10]="abc";
 9 char d[10]="abc\0def";
10 char *e="abcde";
11 int f[10];    //int类型长度为4,包含10个int类型的数组长度为40
12 cout<<"a:"<<sizeof(a)<<"\nb:"<<sizeof(b)<<"\nc:"<<sizeof(c)<<"\nd:"<<sizeof(d)
13     <<"\ne:"<<sizeof(e)<<"\n*e:"<<sizeof(*e)<<"\nf:"<<sizeof(f)<<endl;
14 }

输出结果:

注:

  1. 对于 char *e="abcde",sizeof(e)计算的是指针e所占内存长度,而不是e指向的字符串长度;sizeof(*e)计算的是字符串中第一个字符的长度,char类型长度为1,数组做形参,此时数组名代表的是指针,如void fun(int a[3]){cout<<sizeof(a);//a是指针,值为4}
  2. 对于string类型的变量,sizeof计算的是string对象所占的空间,而不是string所存储的字符串的大小,sizeof(string)大小与库有关,string在不同的库中实现可能不同
  • 数据类型:
sizeof(int) //4
sizeof(double) //8
  • 函数:

计算的是函数返回值类型的长度,如:

int fun(){...}
sizeof(fun())  //计算int类型的长度,为4
sizeof不能计算返回值类型是void的函数

总结:由以上分析可以看出,strlen计算的是字符串中'\0'结尾之前的字符长度,而sizeof是以数据类型为基础,大小为(数据类型长度*元素个数),元素个数为声明的个数,与有无初始化无关。

char a[]={'a','b','c'};
strlen(a);  //因为a[]结尾没有‘\0',所以长度不确定
sizeof(a); //值为3

关于结构体,公用体和枚举类型的sizeof将在下一篇博客中介绍

posted on 2016-04-27 12:26  小菜鸡y  阅读(1399)  评论(2编辑  收藏  举报