C++ 是'\0';在字符串的末尾是否也包含在这里?

C++ 是'\0';在字符串的末尾是否也包含在这里?,c++,string,strlen,C++,String,Strlen,如果我声明一个包含10个元素的字符串,如下所示: char s[10]; char s[10] = "012345678" printf("%d\n", strlen(s)); 那么末尾的“\0”是占据第10位还是第11位?基本上我的问题是,字符串中少了1个元素吗 如果我使用strlen()函数来查找这个字符串的长度,返回值是否包含null?也就是说,如果字符串是“boy”,函数会给我3或4吗?没有第11位,也就是说,是的,要使用的元素少了一个 不要在里面放超过9个字符的字符串Strlen(

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

char s[10];
char s[10] = "012345678"
printf("%d\n", strlen(s));
那么末尾的“\0”是占据第10位还是第11位?基本上我的问题是,字符串中少了1个元素吗


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

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

不要在里面放超过9个字符的字符串
Strlen()
不包括空终止符

例如:


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

是的,
\0
字符将占据第10位。也就是说,字符串将只包含9个输入字符。不,
strlen()
不计算空字符。

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

char s[] = "This is a test."
如果您这样做:

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

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

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


strlen
只返回“逻辑”字符数,即不计算空终止符 > char < />代码>(或<代码> char */COD>这一问题[FYI,不完全相同),尽管我相信您正在研究嵌入的东西。这就像是另一种现实,没有任何意义。