sizeof与strlen均为C语言中求长度的关键字,以下我将列举它们的区别
1.准备
为了区分二者,我将创建两个数组
这两个数组的区别是:
arr1中,有“\0”的存在。也就是说该数组中实际存放的是“abcdefg\0”。
而arr2中,该形式在数组中存放的形式只是‘a' 'b' 'c' 'd' 'e' 'f' 'g'这七个字母。
2.sizeof
使用sizeof对二者求长度后,发现arr1的字符长度是8,而arr2的字符长度是7,原因就在于以“abcdefg”形式存放的arr1中,其实际存放形式为“abcdefg\0”,多一个“\0”,因此长度为8;而arr2中仍是以七个字母abcdefg存放(给了几个字符就存放几个字符),因此其长度为7.
经过调试我们也可发现,如下图
注:sizeof的计算结果为size_t(也就是unsigned int)的类型,因此在打印的时候有可能会报警告(如下图)
此时,我们只需要在打印时以%zd的形式打印即可消除警告(如下图)。
2.strlen
使用strlen求长度时需要引用头文件<string.h>
strlen求长度的原理:遇到“\0”就停止, arr1中字符串末尾有\0,因此可以正确求出字符串长度;但arr2中没有\0,因此不会正确读出长度,只会生成一个伪随机数。
两种打印形式均正确