C语言数组长度的问题

问题是这样的,如果我声明一个数组 a[3] = {'a', 'b', 'c'},接着用 strlen(a) 求出数组的长度为 4。为什么是4呢?明明只有三个元素?此外,如果我将数组长度声明为大于3的数(比如4),则得到的数组长度为 3 !
为啥?!

strlen函数并非用来求数组长度,而是求字符串中有效字符长度。
您的定义:a[3] = {'a', 'b', 'c'},看上去是一个char类型数组,但同时a也可以是一个字符串,内容为"abc...",之所以后面省略,是因为您的字符串没有结尾符'\0',即这个字符串在定义时未封闭。这导致'c'后面的内容被strlen函数计入字符串长度。
所以它在您的某一次执行时,结果是4

至于“如果我将数组长度声明为大于3的数(比如4),则得到的数组长度为 3 !”,
这个更好理解。因为您定义了大于3的数组,这导致'c'后面的空间被初始化成了'\0',于是字符串在'c'处结尾了。所以strlen统计出了3个有效字符。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-16
因为你用Strlen()函数去求一个字符串的长度时,它会从数组的首地址一直检查到字符串结束符'\0'位置才会返回字符的个数。而你定义的数组是a[3],其后面的数据不一定是‘\0',所以,你会得到一个随机值(看何时碰到\0了)。
而你定义的数组长度大于3时,你这样a[3] = {'a', 'b', 'c'}定义数组时,系统会自动将其它位上的数据置为'\0',因此,再Strlen()函数就会得到正确的长度值了。它表示你的字符串中有多少个有效的字符。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网