实例分析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 。
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 。
相关文章推荐
- 大二训练第二周 A Simple Problem with Integers 线段树
- SQL中的join连接
- Hibernate核心文件
- redit安装学习
- 018 - 4Sum
- swift的UILabel的简单使用总结
- zookeeper介绍,安装,以及在大数据中的使用场景介绍
- win7怎么更换经典主题?win7经典主题更换方法介绍
- 如何使用RadioGroup和RadioButton实现FragmentTabHost导航效果?
- 和我一起学 Selenium WebDriver(1)——入门篇
- Scala 的集合数据操作示例
- ERP --企业资源计划
- 概要设计说明书
- C#创建COM组件
- 评价
- 手机自动化测试:Appium源码之API(2)
- [LeetCode][JavaScript]Range Sum Query - Immutable
- Oracle12c中scott用户的创建方法
- 【Cocos2d-x】支持 i18n 国际化(1)——概述及实现
- How To Install Mate Desktop In Ubuntu 14.04 & 14.10