3

如果我声明一个包含 10 个元素的字符串,如下所示:

char s[10];

那么最后的'\0'是占据第10位还是第11位呢?基本上我的问题是我们是否在字符串中少了 1 个元素?

如果我使用 strlen() 函数来查找这个字符串的长度,返回值是否包含 null?即,如果字符串是“boy”,函数会给我 3 还是 4?

4

4 回答 4

10

没有第 11 位,也就是说,是的,那就是少了一个要使用的元素。

不要在其中放置超过 9 个字符的字符串。 Strlen()不包括空终止符。

例如:

char s[]="hello"; 

s是 6 个字符的数组,但strlen()ofs是 5。

于 2012-04-15T12:27:48.963 回答
2

是的,该\0角色将占据第 10 位。意思是,字符串将只包含 9 个输入字符。不,strlen()不计算空字符。

于 2012-04-15T12:28:56.790 回答
2

如果你声明一个这样的数组,它不需要在末尾有一个零字节。如果你调用任何需要字符串的函数,它几乎肯定会导致崩溃。您需要初始化数组:

char s[] = "This is a test."

如果你做这样的事情:

char s[10] = "012345678"
printf("%d\n", strlen(s));

它显然会打印 9。您不能在该数组中放入 10 个字符,因为空字节会被写入数组边界之外。

于 2012-04-15T12:29:37.727 回答
1

如果您声明一个 10 个字符的数组,您必须记住其中一个必须用作字符串终止符,因此您最多可以存储 9 个字符。

strlen, 相反,只返回“逻辑”字符的数量,即它不会计算空终止符。

于 2012-04-15T12:31:22.797 回答