C++ 是'\0';在字符串的末尾是否也包含在这里?
如果我声明一个包含10个元素的字符串,如下所示: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(
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
只返回“逻辑”字符数,即不计算空终止符因为这是标记C++,我认为这是一个安全的假设:-我知道那些有某种目的;Modula2是一种语言的一个不同例子。如果字符数等于数组计数,则省略终止null。所有函数的行为都类似于C“-n”变量,每个操作都必须通过缓冲区的上限,以允许运行时处理此情况。出于公平考虑,对此进行投票,因为OP似乎无论如何都不接受任何答案。\0可以插入索引0到索引9(含索引9)之间的任何位置。它不能出现在索引10中(索引范围在这里是0到9)。当您使用C++时,我会指出,您应该使用字符串类,而不是使用代码> > char < />代码>(或<代码> char */COD>这一问题[FYI,不完全相同),尽管我相信您正在研究嵌入的东西。这就像是另一种现实,没有任何意义。