我们在开发程序时经常会遇到 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 还有很多值得注意的地方,这就需要大家在平时使用时多多注意,不断总结了。
:)
阅读(798) | 评论(0) | 转发(0) |