sizeof和strlen区别以及使用情况分析
来源:互联网 发布:mac关闭访客 编辑:程序博客网 时间:2024/05/24 02:51
实际做开发项目中,如果有涉及到字符数据处理等情况,都会遇到数据长度的获取。比如现在需要对a[50]数组进行赋值1~50的指定数据,代码如下:
char a[50];for(i = 0 ; i <50 ; i++){ a[i]=i+1;}
如果50长度未知的情况,又应该如何为数组赋值?想到的就是获取数组长度(元素个数)然后再赋值(解决方法见文末)。C标准函数库有自带获取数据长度的函数:sizeof和strlen。但用这两函数还是有区别的。
sizeof
sizeof 并不是一个函数,而是操作符(operator),其作用就是返回一个对象的内存或者一个类型所占用的字节数
上面提到所占用的字节数,对同一种类型在不同位数处理器的字节数是不一样的,这个要切记。下表是总结不同类型在不同处理器下的占用字节数。
因此sizeof用法如下:
- 在32位处理器下,针对char a[50],要计算a数组占用内存大小:sizeof(a) = 50字节,
如果针对int a[50],则a数组占用内存大小:sizeof(a) = 50*4=200字节. - sizeof也可以直接计算某个类型的字节数,如在16位处理器中sizeof(int)=2字节;在32位处理器中sizeof(int)=4字节。
strlen
strlen用于专门处理处理字符串,返回字符串的字符长度的,strlen是一个函数,不是操作符。其形参只能是char*型。用法如下:
如针对一个字符串数组:
char a[10]=”12345”;
则使用函数:strlen(a)=5。字符串长度为5。
虽然数组长度占用内存为10,当实际存储字符串只有5个。strlen将数组进行遍历,直到结束符’\0’才结束计算。
两者区别分析与使用
以上对sizeof和strlen的描述,读者对这两个也有了基本了解。以32位处理器为例,用两个简单例子可以比较清楚两者的区别:
已知:char a[10]=”12345”;
则:
sizeof(a) =10*sizeof(char)=10*1=10字节长度
strlen(a)=5字符长度已知:int a[10]={11,22, 33,44,55};
则:
sizeof(a) =10*sizeof(int)=10*4=40字节长度
strlen(a)无法使用,针对char型字符。
因此区别总结如下:
sizeof返回的是内存的字节长度,和数组元素个数无关,和数组定义的元素个数以及处理器位数有关。
strlen只针对字符串,计算字符串内字符的个数,与数组定义的元素个数无关。
再回到文章开头的问题:现在需要对a[length]数组进行赋值1~length的指定数据(其中并不清楚length的值)。应该采用sizeof比较合理(无论几位处理器)。
//sizeof(a)/sizeof(char)相当于获取到了数组长度(元素个数)for(i = 0 ; i <sizeof(a)/sizeof(char) ; i++){ a[i]=i+1;}
- sizeof和strlen区别以及使用情况分析
- strlen 和 length 以及 sizeof()区别异同
- sizeof的使用以及sizeof与strlen的区别
- sizeof和strlen的使用与区别
- sizeof 和 strlen区别
- sizeof和strlen区别
- strlen和sizeof区别
- strlen和sizeof区别
- STRLEN和sizeof区别
- strlen和sizeof区别
- sizeof() 和 strlen() 区别
- strlen和sizeof区别
- sizeof和strlen区别
- strlen()和sizeof()区别
- sizeof 和 strlen 区别
- strlen和sizeof区别
- sizeof 和 strlen 区别
- sizeof和strlen()区别
- 高斯消元
- SVM学习笔记-对偶形式的SVM
- hive常见命令
- jstack 命令查看JAVA线程堆栈
- 在指定字段后添加字段示例
- sizeof和strlen区别以及使用情况分析
- 关于寻路算法的一些思考(7):地图表示
- Nginx+lua+mysql实时存日志
- 离散内积与最小二乘
- 基于QT开发的截图工具
- String、StringBuilder、StringBuffer
- 关于寻路算法的一些思考(8):长期和短期目标
- Java8 Stream的终止操作使用示例
- js之数组