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
- C++开发面试题:sizeof与strlen区别
- [面试题]sizeof与strlen的区别
- Sizeof与Strlen的区别与联系(面试题)
- 企业面试题&&strlen与sizeof的区别
- c语言标识符,数据类型,sizeof和strlen区别及面试题
- C++-sizeof()与strlen()的区别
- C语言中sizeof与strlen区别
- C语言中sizeof与strlen区别
- C语言:strlen与sizeof的区别
- C语言中sizeof与strlen区别
- C/C++ sizeof与strlen区别
- C语言中sizeof与strlen区别
- C语言中sizeof与strlen区别
- C语言中sizeof 与strlen 区别
- C语言中sizeof与strlen区别
- C语言中sizeof与strlen区别
- C/C++ sizeof与strlen区别
- C/C++ sizeof与strlen区别
- 什么是Object
- MySQL数据库(三)---约束、修改数据表
- Maven详解之聚合与继承
- smmu学习笔记之device的platform_data和driver_data
- HttpClient4.3.3 禁止自动重定向
- C++开发面试题:sizeof与strlen区别
- RequireJs学习笔记(一)
- 删除字符串中出现次数最少的字符
- 正则表达式
- HBase条件查询(多条件查询)
- hbase的查询scan功能注意点
- 什么是内部类
- 个人经验总结优化数据库大幅度提高…
- HBase一对多关系的表结构设计