您的位置:首页 > 编程语言 > C语言/C++

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

2017-03-22 11:11 447 查看
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=4
int d=  sizeof(szKey[0]);
int szlen=strlen(szKey[0]);
//计算数组元素个数
int nItem = sizeof(szKey)/sizeof(szKey[0]);
//使用sizeof定义数组的维数
string strParam[sizeof(szKey)/sizeof(szKey[0])];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息