实例分析sizeof与strlen的用法

一段时间没写程序,可能有一些用法就会生疏。今天遇到一个sizeof和strlen的用法,折腾了老半天,事后做一个小结。

sizeof 是关键字,strlen是函数,两者有本质的差别,虽然功能相似。strlen使用的局限性比较多,如:strlen只能用char*做参数,且必须是以''\0''结尾的。详细可查看网上一些对两者的对比介绍:

http://zhidao.baidu.com/link?url=7-rArYNoQglqvJB38A1a6TiNaAL8PpwCe4fVT6XUc1DdOmRx5ZbRyjm4NI6ESxBJFv8hr_ZFzCJlRQ9oaDyF5K

 

下面几个例子来看看:

例子一

strlen(“abcdefgh”) = 8

sizeof(“abcdefgh”) = 9

可以看出,计算字符串长度的时候,strlen是不包含结束符的,而sizeof 会把结束符包含上。

 

例子二

const char *pointerArray[7] ={"abcdefgh","abcdefgh","abcdefgh","abcdefgh","abcdefgh","abcdefgh","abcdefgh"};

sizeof(pointerArray) = 28

strlen(pointerArray) 非法

strlen(pointerArray[0]) = 8

sizeof(pointerArray[0]) = 4

1、  对于指针数组,sizeof(pointerArray)算出来的长度是 “指针长度”x“数组长度” = 28,即7*sizeof(char *) = 28

2、  而strlen(pointerArray)是非法的,因为数组里面装载的是一个一个的指针。

3、  对于strlen(pointerArray[0])而言,计算的是pointerArray[0]指向的地址空间存储的字符串,即“abcdefgh”长度,为8。

4、  而sizeof(pointerArray[0])计算出来是指针的长度。(32位机上统一为4)

 

例子三

int array[6] = {1,2,3,4,5,6};

sizeof(array) = 24

对于以上sizeof(array) 计算出来的值是:6*sizeof(int) ,跟“例子二“的第一种情况一样。

根据以上的情况可以得知,反过来可以通过sizeof来计算数组的长度:sizeof(array)/sizeof(int)

 

例子四

char array [20]="0123456789";
strlen(array) = 10;
sizeof(array) = 20;

1、  strlen(array) 计算的是array指针指向的字符串长度,也就是"0123456789" ,长度位10。

顺便提一下,array 就指向数组的首地址。

2、sizeof(array)是计算数组的长度,也就是20*sizeof(char) = 20 。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值