strlen
возвращает количество символов, предшествующих завершающему нулевому символу. Реализация strlen
может выглядеть так:
size_t strlen(const char * str)
{
const char *s;
for (s = str; *s; ++s) {}
return(s - str);
}
Эта конкретная реализация разыменовывает s
, где s
может содержать неопределенные значения. Это эквивалентно этому:
int a;
int* p = &a;
*p;
Так, например, если бы кто-то сделал это (что приводит к тому, что strlen
дает неправильный вывод):
char buffer[10];
buffer[9] = '\0';
strlen(buffer);
Это неопределенное поведение?