2015-10-09 2 views
-3

Я видел, что кто-то опубликовал эту функцию, которая возвращает длину строки. Может ли кто-нибудь объяснить мне по очереди, что происходит, потому что я не понимаю, что происходит с указателем * s и как он может проходить через строку один за другим и вычислять количество символов в строке. Эта функция от FreeBSDвозвращающая длина строки

size_t 
strlen(const char *str) 
{ 
const char *s; 
for (s = str; *s; ++s); 
return(s - str); 
} 
+1

Это не «объяснить код мне построчный» сайта. –

+2

Сколько вы уже знаете о указателях, арифметике указателя и логических условиях в C? – birryree

+0

Я знаю, в основном, что происходит. Просто смутило что? делается. Geeze. Я не думал, что это такая большая сделка для небольшого количества кода. Извини за это. –

ответ

2
size_t 
strlen(const char *str) 
{ 
const char *s; // init pointer 
for (s = str; *s; ++s); // set pointer to beginning of str, and increment pointer until 
         // you reach '\0', which is the end of the string 
return(s - str); // compute the distance between end and beginning of string 
       // (s points to end of string, str points to beginning of string) 
} 
+2

И '* s' как второе выражение в цикле' for', является неявной оценкой, проверяя, если '* s' указывает на' '\ 0' ', ограничитель строк. До тех пор, пока '' \ 0'' не будет выполнено, любое значение не-0 будет истинным, т. Е. Цикл будет продолжен. –

+0

Спасибо. Для объяснения. Я никогда не рассматривал неявную оценку –

+0

@ re.m7 в C, некоторые люди любят использовать определения 'true' и' false' явно. Но язык работает так, что любое выражение, которое оценивается как '0', логически ложно, что-то другое истинно при использовании неявно, например' if (apples) 'не нужно указывать, сколько у вас (или должно) истинно. –

Смежные вопросы