C语言中sizeof和strlen的区别

sizeof和strlen的区别

最近复习了c语言,在字符串,数组中经常用到的sizeof和strlen有什么区别呢?可能在实际运用中会混在一起,所以这篇文章把它们的用法总结的清清楚楚。

举下面几个例子
第一个例子:

char *s="0123456789";

sizeof(s)的结果位4,s是指向字符串常量的字符指针
sizeof(*s)的结果位1,*s是第一个字符

第二个例子:

int s[100]="0123456789";

sizeof(s)的结果为400,s表示在内存中的大小,100*4=400。
strlen(s)错误,因为strlen的参数只能是char *,且必须是以"\0"结尾的。

第三个例子:

char s[100]="0123456789";

sizeof(s)的结果为100,s表示在内存中预分配的大小,100*1=100
strlen(s)的结果为10,它的内部实现使用一个循环计算字符串的长度,直到"\0"为止。

总结:
(1)sizeof操作符的结果类型是size_t,它在头文件中的typedef为unsigned int 类型保证能容纳显示所建立的最大对象的字节大小。
(2)sizeof是运算符,strlen是函数。
(3)sizeof可以用类型做参数,strlen只能用char *做参数,且必须是以"\0"结尾的。
(4)数组做sizeof的参数不退化,传递给strlen就退化为指针。
(5)sizeof后如果是类型必须加括号,如果是变量名可以不加括号。
(6)当使用了一个结构类型或变量时,sizeof返回实际的大小。当使用一静态的空间数组sizeof返回全部数组的尺寸。sizeof操作符不能返回被动态分配的数组或外部的数组的尺寸。
(7)sizeof操作符不能用于函数类型、不完全类型或位字段。如位置存储大小的数组类型、未知内容的结构或联合类型、void类型等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值