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

Strlen() для строки char с нулевым завершением?

Определяется strlen(const char *s), когда s не завершается нулем, и если да, то что он возвращает?

4b9b3361

Ответ 1

Нет, это не определено. Это может привести к нарушению доступа к памяти, поскольку оно будет продолжать отсчет до тех пор, пока не достигнет первого байта памяти, значение которого равно 0.

Ответ 2

Из стандарта C99:

Функция strlen возвращает количество символов, предшествующих завершающий нулевой символ.

Если нет нулевого символа, значит, результат undefined.

Ответ 3

Может быть, вам нужно strnlen?

Ответ 5

Если ваша строка не завершена NUL, функция будет продолжать искать, пока не найдет ее.

Если вам повезет, это приведет к сбою вашей программы.

Если вам не повезет, вы получите большую, чем ожидалось, длину, с большим количеством "неожиданных" значений в ней.

Ответ 6

Он вернет количество символов, встречающихся до появления "\ 0".

Ответ 7

Он не определен. Это вызывает поведение undefined, что означает, что что-то может произойти, скорее всего, ваша программа выйдет из строя.

Ответ 8

strlen() работает только (делает что-то полезное) для строк с нулевым завершением; вы получите результат полностью undefined, если вы передадите что-либо другое. Если вам повезет, это не приведет к сбою:)

Ответ 9

man 3 strcspn

size_t strcspn (const char * s, const char * reject);

Длина строк с разделителями двоеточия:

size_t len = strcspn(str, ":");

Длина строк с разделителями-запятыми:

size_t len = strcspn(str, ",");

Длина строк с разделителями табуляции:

size_t len = strcspn(str, "\t");

Ответ 10

Он всегда определен.

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