C语言数组长度的问题
问题是这样的,如果我声明一个数组a[3]={'a','b','c'},接着用strlen(a)求出数组的长度为4。为什么是4呢?明明只有三个元素?此外,如果我将数组长度声...
问题是这样的,如果我声明一个数组 a[3] = {'a', 'b', 'c'},接着用 strlen(a) 求出数组的长度为 4。为什么是4呢?明明只有三个元素?此外,如果我将数组长度声明为大于3的数(比如4),则得到的数组长度为 3 !
为啥?! 展开
为啥?! 展开
2个回答
展开全部
strlen函数并非用来求数组长度,而是求字符串中有效字符长度。
您的定义:a[3] = {'a', 'b', 'c'},看上去是一个char类型数组,但同时a也可以是一个字符串,内容为"abc...",之所以后面省略,是因为您的字符串没有结尾符'\0',即这个字符串在定义时未封闭。这导致'c'后面的内容被strlen函数计入字符串长度。
所以它在您的某一次执行时,结果是4
至于“如果我将数组长度声明为大于3的数(比如4),则得到的数组长度为 3 !”,
这个更好理解。因为您定义了大于3的数组,这导致'c'后面的空间被初始化成了'\0',于是字符串在'c'处结尾了。所以strlen统计出了3个有效字符。
您的定义:a[3] = {'a', 'b', 'c'},看上去是一个char类型数组,但同时a也可以是一个字符串,内容为"abc...",之所以后面省略,是因为您的字符串没有结尾符'\0',即这个字符串在定义时未封闭。这导致'c'后面的内容被strlen函数计入字符串长度。
所以它在您的某一次执行时,结果是4
至于“如果我将数组长度声明为大于3的数(比如4),则得到的数组长度为 3 !”,
这个更好理解。因为您定义了大于3的数组,这导致'c'后面的空间被初始化成了'\0',于是字符串在'c'处结尾了。所以strlen统计出了3个有效字符。
展开全部
因为你用Strlen()函数去求一个字符串的长度时,它会从数组的首地址一直检查到字符串结束符'\0'位置才会返回字符的个数。而你定义的数组是a[3],其后面的数据不一定是‘\0',所以,你会得到一个随机值(看何时碰到\0了)。
而你定义的数组长度大于3时,你这样a[3] = {'a', 'b', 'c'}定义数组时,系统会自动将其它位上的数据置为'\0',因此,再Strlen()函数就会得到正确的长度值了。它表示你的字符串中有多少个有效的字符。
而你定义的数组长度大于3时,你这样a[3] = {'a', 'b', 'c'}定义数组时,系统会自动将其它位上的数据置为'\0',因此,再Strlen()函数就会得到正确的长度值了。它表示你的字符串中有多少个有效的字符。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询