是char null终止符包含在长度计数中

run*_*ode 35 c c++

#include <stdio.h>

int main(int argc, char *argv[]) {
   char s[]="help";
   printf("%d",strlen(s));  
}
Run Code Online (Sandbox Code Playgroud)

为什么上面的输出是4,不是5是正确的答案?

在内存中它应该是'h','e','l','p','\ 0'..

谢谢.

bil*_*llz 51

strlen:返回给定字节字符串的长度,不包括null终止符;

char s[]="help";
strlen(s) should return 4.
Run Code Online (Sandbox Code Playgroud)

sizeof:返回给定字节字符串的长度,包括null终止符;

char s[]="help";
sizeof(s) should return 5.
Run Code Online (Sandbox Code Playgroud)

  • 注意:如果数组的大小已知,例如 `char s[9] = "help"`,则 `sizeof` 将是 9 而不是 5,因为其余存储空间将用 `\0` 隐式初始化。 (2认同)

0x4*_*2D2 5

strlen计算元素直到它到达空字符,在这种情况下它将停止计数.它不包括它的长度.


Chr*_*man 5

strlen()不计算数组中的字符数(事实上,这甚至可能不可知(如果您只有一个指向内存的指针,而不是数组)。正如您所发现的,它确实计算了直到但不包括空字符的字符。考虑char s[] = {'h','i','\0','t','h','e','r','e'};