strlen和sizeof的区别小结

    前两天发了这篇帖子,结果发现并没有提交成功,浪费了广大人民群众的感情。我错了,我真的错了。现在赶紧补上,希望各位大虾过客多多包涵。

   

笔试中经常遇到sizeofstrlen相关的问题,应试者稍有不慎就会中招。其实它们都是C中最基本的概念之一,如果笔试中答错了,无疑会得到考官的“鄙视”。小弟在此总结一下,如有不完整或错误之处,敬请补充和指正。

1, sizeof是操作符(operator)strlen是函数。

2, 因为sizeofoperator,所以sizeof后面如果是类型,必须加括号,如果是变量名可以不加括号。

3, sizeof操作符的结果类型是size_t(被typedefunsigned int类型)。

4, sizeof可以用类型做参数,strlen只能用char *类型的变量作为参数,并且必须以“/0”结尾。strlen计算字符串的长度,一直到遇到“/0”为止。

5, 数组作为sizeof的参数不退化,传递给strlen就退化为指针。

6, 大部分编译程序在编译时计算了sizeof,因此sizeof可以用来定义数组维数的原因;strlen的结果要在运行时计算,计算字符串的长度,而不是类型占内存的大小。

7, 当使用了一个结构类型或变量时,sizeof返回实际的大小。当使用一静态的空间数组时,sizeof返回全部数组的尺寸。sizeof不能返回被动态分配的数组或外部的数组的尺寸。

8, sizeof操作符不能用于函数类型,不完全类(即具有位置存储大小数据的数据类型,比如未知存储大小的数组类型,未知内容的structunionvoid类型等)型或位字段。

下面举几个例子:

char * str = “12345”;

strlen(str) = 5, 字符串实际长度为5(不包括”/0”

sizeof(str) = 4, str是指向字符串首地址的指针

sizeof(*str) = 1, *str是字符串的第一个字符

char arr[] = “12345”;

strlen(arr) = 5, 字符串实际长度为5(不包括”/0”

sizeof(arr) = 6, arr是数组,计算到默认的”/0”的位置

sizeof(*arr) = 1, *arr是字符串数组的第一个字符

char arr1[100] = “12345”

sizeof(arr1) = 100,  arr1表示在内存中分配的大小,100x1 = 100

strlen(arr1) = 5, 字符串实际长度为5(不包括”/0”


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值