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

时间:2013-02-16 01:24:01

标签: c++ c

#include <stdio.h>

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

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

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

5 个答案:

答案 0 :(得分:44)

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

char s[]="help";
strlen(s) should return 4.

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

char s[]="help";
sizeof(s) should return 5.

答案 1 :(得分:5)

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

答案 2 :(得分:4)

strlen()不计算数组中的字符数(事实上,这可能甚至不可知(如果你只有指向内存的指针,而不是数组)。就像你一样已经找到,计算最多但不包括空字符的字符数。考虑char s[] = {'h','i','\0','t','h','e','r','e'};

答案 3 :(得分:2)

这是4。

strlen()计算最多但不包括第一个值为0的字符数 - nul终结符。

答案 4 :(得分:2)

strlen(const char* ptr)通过计算从零到零的非零元素来返回字符串的长度。所以'\0'不算数。

我建议您查阅link等参考文章,以获取此类问题。

明确表示:

 A C string is as long as the number of characters between the beginning 
 of the string and the terminating null character (without including the
 terminating null character itself).