C++开发面试题:sizeof与strlen区别
2017-03-22 11:11
447 查看
1.功能不同
sizeof是操作符,参数为任意类型,主要计算类型占用内存大小。
strlen()是函数,其函数原型为:
extern unsigned int strlen(char *s);
其参数为char*,strlen只能计算以"\0"结尾字符串的长度,计算结果不包括"\0"。
当将字符数组作为sizeof()的参数时,计算字符数组占用内存大小;当将字符数组作为strlen()函数,字符数组转化为char*。因为sizeof的参数为任意类型,而strlen()函数参数只能为char*,当参数不是char*必须转换为char*。
当字符数组作为函数参数时,实际上传递的时数组首地址,本质上是指针。因此在函数内部计算形参字符数组的产度是应该使用strlen()而不是sizeof()。
3.计算时间不同
sizeof()在编译的时候计算,因此可以使用sizeof()定义数组的维数;strlen()在运行的时候计算。
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])];
相关文章推荐
- C语言 sizeof和strlen之间的那些事 C/C++软件开发求职面试题 必备考点(一)
- [面试题]sizeof与strlen的区别
- C++中strlen与sizeof的区别
- C++ 学习(第一天)sizeof与strlen 的区别
- C++的基础知识(十五)--Sizeof与Strlen的区别与联系
- C/C++之sizeof与strlen的区别
- C++专题:strlen和sizeof的区别
- 对比C++中sizeof与strlen函数的区别
- C++-sizeof()与strlen()的区别
- 转载:C/C++:sizeof和strlen的区别
- C++基础--sizeof和strlen的区别
- C/C++中sizeof与strlen的区别
- C/C++之sizeof与strlen的区别
- C++中sizeof与strlen的区别
- C/C++中字符串数组及strlen()和sizeof()区别
- Sizeof与Strlen的区别与联系(面试题)
- C++之sizeof与strlen区别
- 芒果iOS开发sizeof和strlen的区别
- 企业面试题&&strlen与sizeof的区别
- [收集] C++ sizeof()和lstrlen()和strlen()区别