您的位置:首页 > 其它

实例分析sizeof与strlen的用法

2015-11-11 17:28 465 查看
一段时间没写程序,可能有一些用法就会生疏。今天遇到一个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 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: