Это
char y[4] = {'t','e','s','t'};
не является правильной строкой с нулевым символом в конце . Это массив из четырех символов, без завершающего '\0'
. strlen()
просто считает символы, пока не достигнет нуля. С y
он просто считает конец массива, пока не обнаружит случайно нулевой байт.
Делая это, вы вызываете неопределенное поведение. Код может также отформатировать ваш жесткий диск.
Этого можно избежать, используя специальный синтаксис для инициализации массива символов:
char y[] = "test";
Это инициализирует y
с пятью символами, поскольку автоматически добавляется '\0'
.
Обратите внимание, что я также оставил размер массива неопределенным. Компилятор сам это вычисляет, и он автоматически перерисовывается, если я изменяю длину строки.
Кстати, вот простая strlen()
реализация:
size_t strlen(const char* p)
{
size_t result = 0;
while(*p++) ++result;
return result;
}
Современные реализации, скорее всего, не будут извлекать отдельные байты или даже использовать встроенные функции ЦП, но это основной алгоритм.