Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3350364
  • 博文数量: 1450
  • 博客积分: 11163
  • 博客等级: 上将
  • 技术积分: 11101
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-25 14:40
文章分类

全部博文(1450)

文章存档

2017年(5)

2014年(2)

2013年(3)

2012年(35)

2011年(39)

2010年(88)

2009年(395)

2008年(382)

2007年(241)

2006年(246)

2005年(14)

分类: C/C++

2010-07-11 20:25:42

我们在开发程序时经常会遇到 sizeof 和 strlen函数,由其是在计算字符串的时候,对初学者来说,它们之间还真容易混淆。那么它们之间有什么区别呢?

如果从理论角度来讲,提出这个问题本身就不对,因为这个两个就不是一个的东西,没什么可比性。但如果从使用的角度来讲还是应该对它们进行一下对比的,因为很多人都将它们使用错了。

我们首先来看一下例子,如下图所示:


这个程序很简单,就是几条输出语句,打印出的结果是什么呢?如下所示:

从中我们可以清晰的看出,sizeof 计算的是空间的大小,而strlen计算的是字符串的长度。

下面我来详细的分析一下:
第一条打印语句是, printf("size of is %u\n", sizeof(str));
其中的 sizeof(str) 表式什么意思呢? 按照我们上面所说的,它应该表式的是str这个数组的空间,所以结果应该是 20。

再来看第二条打印语句,printf("size of is %u\n", sizeof(c));
我们还是同样的方法,它应该表式的时打印 c 这个字符串指针的空间,即应该是8字节。那对不对呢?显然是对的。因为我的linux系统是64位的,在64位的系统中指针的空间就是占8字节。

如果不相信的话,我们来验证一下,看看第三条打印语句,printf("size of is %u\n", sizeof(a));
a是什么呢?奥,它是指向整形变量 i 的指针,按照上面的推论,用 sizeof 得到它的空间就应该是 8字节。对不对呢?我们一看结果,果然是8字节,这就印证了我们上面第二条的结论。

下面我们再来看第四条打印语句,printf("strlen is %u\n", strlen(str));
它是打印字符串的长度,其中不包括最后一个 ‘\0’ 字符,结果就是10,这显然是证确的。

所以,我们得出了上面红色字体的结论是正确的。这里再强调一下,
sizeof 计算的是空间的大小,而strlen计算的是字符串的长度。

那么 sizeof 与 strlen 还有什么本质的区别吗?
当然,它还有一个本质的区别就是, sizeof 是一个运算符,而 strlen是一个函数换另一种理释就是,sizeof运算符是在 C/C++编译的时候进行计算,而函数是在程序运行时才进行计算。这是一个本质的区别。我想这一点对于学过编译原理的同学来说是非常容易理解的。

上面我简单的对 sizeof 和 strlen 在字符串中的使用做了一个对比。当然 sizeof 还有很多值得注意的地方,这就需要大家在平时使用时多多注意,不断总结了。

:)

阅读(756) | 评论(0) | 转发(0) |
0

上一篇:linux sigsuspend 函数的作用

下一篇:GP

给主人留下些什么吧!~~