C语言数组长度的问题

问题是这样的,如果我声明一个数组a[3]={'a','b','c'},接着用strlen(a)求出数组的长度为4。为什么是4呢?明明只有三个元素?此外,如果我将数组长度声... 问题是这样的,如果我声明一个数组 a[3] = {'a', 'b', 'c'},接着用 strlen(a) 求出数组的长度为 4。为什么是4呢?明明只有三个元素?此外,如果我将数组长度声明为大于3的数(比如4),则得到的数组长度为 3 !
为啥?!
展开
 我来答
百度网友00e4ec0
2013-08-16 · TA获得超过308个赞
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:146万
展开全部
strlen函数并非用来求数组长度,而是求字符串中有效字符长度。
您的定义:a[3] = {'a', 'b', 'c'},看上去是一个char类型数组,但同时a也可以是一个字符串,内容为"abc...",之所以后面省略,是因为您的字符串没有结尾符'\0',即这个字符串在定义时未封闭。这导致'c'后面的内容被strlen函数计入字符串长度。
所以它在您的某一次执行时,结果是4

至于“如果我将数组长度声明为大于3的数(比如4),则得到的数组长度为 3 !”,
这个更好理解。因为您定义了大于3的数组,这导致'c'后面的空间被初始化成了'\0',于是字符串在'c'处结尾了。所以strlen统计出了3个有效字符。
kaixingui2012
2013-08-16 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6447万
展开全部
因为你用Strlen()函数去求一个字符串的长度时,它会从数组的首地址一直检查到字符串结束符'\0'位置才会返回字符的个数。而你定义的数组是a[3],其后面的数据不一定是‘\0',所以,你会得到一个随机值(看何时碰到\0了)。
而你定义的数组长度大于3时,你这样a[3] = {'a', 'b', 'c'}定义数组时,系统会自动将其它位上的数据置为'\0',因此,再Strlen()函数就会得到正确的长度值了。它表示你的字符串中有多少个有效的字符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式