Подтвердить что ты не робот

Заключается в том, что нулевой ограничитель char включается в счетчик длины

#include <stdio.h>

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

Почему вышеприведенный вывод равен 4, а не что 5 - правильный ответ?

в памяти должно быть "h", "e", "l", "p", "\ 0".

Спасибо.

4b9b3361

Ответ 1

strlen: возвращает длину заданной строки байта, не содержащую нулевой ограничитель;

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

sizeof: возвращает длину заданной строки байта, включает нулевой ограничитель;

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

Ответ 2

strlen подсчитывает элементы до тех пор, пока не достигнет нулевого символа, и в этом случае он перестанет считать. Он не будет включать его с длиной.

Ответ 3

strlen() не учитывает количество символов в массиве (на самом деле это может быть даже не познаваемым (если у вас есть только указатель на память, а не на массив). Это делает, как вы нашли out, подсчитайте количество символов до но не включая нулевой символ. Рассмотрим char s[] = {'h','i','\0','t','h','e','r','e'};

Ответ 4

Это 4.

strlen() подсчитывает количество символов до, но не включает, первый char со значением 0 - nul terminator.

Ответ 5

strlen(const char* ptr) возвращает длину строки путем подсчета ненулевых элементов, начиная с до тех пор, пока не достигнет нуля. Поэтому '\0' не учитывается.

Я рекомендую вам обратиться к ссылке, например, ссылка для таких вопросов.

Это четко указано как:

 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).