понимание функции strlen в C - PullRequest
       14

понимание функции strlen в C

5 голосов
/ 20 сентября 2010

Я изучаю C. И я вижу, что эта функция находит длину строки.

size_t strlen(const char *str) 
{ 
 size_t len = 0U; 
 while(*(str++)) ++len; return len; 
}

Теперь, когда завершается цикл?Я в замешательстве, так как str ++, всегда увеличивает указатель.

Ответы [ 5 ]

11 голосов
/ 20 сентября 2010
while(*(str++)) ++len;

совпадает с:

while(*str) {
 ++len;
 ++str;
}

совпадает с:

while(*str != '\0') {
 ++len;
 ++str;
}

Итак, теперь вы видите, когда str указывает на символ null в конце строки, условие проверки не выполняется и вы прекращаете цикл.

10 голосов
/ 20 сентября 2010
  1. Строки C заканчиваются символом NUL, значение которого равно 0
  2. 0 - это false в C, а все остальное - true.

Поэтому мы продолжаем увеличивать указатель на строку и длину до тех пор, пока не найдем NUL, а затем вернемся.

2 голосов
/ 20 сентября 2010

Вам нужно понять два понятия, чтобы понять идею функции:

1 °) Строка C - это массив символов.

2 °) В C переменная массива фактически является указателем на первый случай таблицы.

Так что же делает Стрлен? Он использует арифметику указателей для анализа таблицы (++ для указателя означает: следующий случай), пока не дойдет до конечного сигнала ("\ 0").

0 голосов
/ 20 сентября 2010

Правильно, str++ увеличивает счетчик и возвращает предыдущее значение.Звездочка (*) разыменовывает указатель, т. Е. Дает символьное значение.

Строки C заканчиваются нулевым байтом.Цикл while завершается, когда условие больше не истинно, что означает, что оно равно нулю.

Таким образом, цикл while выполняется, пока не встретит нулевой байт в строке.

0 голосов
/ 20 сентября 2010

Как только *(str++) вернет 0, цикл завершится. Это произойдет, когда str будет указывать на последний символ строки (потому что строки в C завершены 0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...