Определяется strlen(const char *s)
, когда s
не завершается нулем, и если да, то что он возвращает?
Strlen() для строки char с нулевым завершением?
Ответ 1
Нет, это не определено. Это может привести к нарушению доступа к памяти, поскольку оно будет продолжать отсчет до тех пор, пока не достигнет первого байта памяти, значение которого равно 0.
Ответ 2
Из стандарта C99:
Функция strlen возвращает количество символов, предшествующих завершающий нулевой символ.
Если нет нулевого символа, значит, результат undefined.
Ответ 3
Может быть, вам нужно strnlen?
Ответ 4
Не совсем, и это вызовет плохие вещи.
Ответ 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
Он всегда определен.
Он вернет длину "строки", пока не достигнет байта с нулевым значением в нем. Плохая идея, потому что это может вызвать переполнение буфера.