C++开发面试题:sizeof与strlen区别

来源:互联网 发布:javascript 同源 编辑:程序博客网 时间:2024/06/05 10:31

1.功能不同

sizeof是操作符,参数为任意类型,主要计算类型占用内存大小。

strlen()是函数,其函数原型为:

extern unsigned int strlen(char *s);

其参数为char*,strlen只能计算以"\0"结尾字符串的长度,计算结果不包括"\0"。

     char* ss="0123456789";//s1=4,ss为字符指针在内存中占用4个字节int s1=sizeof(ss);//s2=10,计算字符串ss的长度int s2=strlen(ss);
2.参数不同

当将字符数组作为sizeof()的参数时,计算字符数组占用内存大小;当将字符数组作为strlen()函数,字符数组转化为char*。因为sizeof的参数为任意类型,而strlen()函数参数只能为char*,当参数不是char*必须转换为char*。

char str[]="abced";     //a为6(1*6),字符数组str包含6个元素(a,b,c,d,e,\0),每个元素占用1个字节    int a= sizeof(str);    //len为5,不包含"\0",    int len=strlen(str);    //str[0]是字符元素a,所以b=1    int b= sizeof(str[0]);

当字符数组作为函数参数时,实际上传递的时数组首地址,本质上是指针。因此在函数内部计算形参字符数组的产度是应该使用strlen()而不是sizeof()。

void CTestDlg::OnBnClickedButton1(){    char str[]="abced";    UpperCase(str);}
void CTestDlg::UpperCase(char str[]){    //tes=4,数组作为参数时,传递的是首地址,本质上是一个指针    int tes=sizeof(str);    //tes1=5,strlen是计算字符串str的长度    int tes1=strlen(str);}

3.计算时间不同

sizeof()在编译的时候计算,因此可以使用sizeof()定义数组的维数;strlen()在运行的时候计算。

 char* szKey[] = { "Mmsi", "Speed","Heading","Latitude","Flag"};//c为20(每个char*指针4个字节,总共5个字符串,4*5=20)int c = sizeof(szKey);//szKey数组每个元素为char *指针,4个字节,所以d=4int d=  sizeof(szKey[0]);int szlen=strlen(szKey[0]);//计算数组元素个数int nItem = sizeof(szKey)/sizeof(szKey[0]);//使用sizeof定义数组的维数 string strParam[sizeof(szKey)/sizeof(szKey[0])];




0 0
原创粉丝点击