Namespaces
Variants

strlen, strnlen_s

From cppreference.net
< c ‎ | string ‎ | byte
Определено в заголовочном файле <string.h>
size_t strlen ( const char * str ) ;
(1)
size_t strnlen_s ( const char * str, size_t strsz ) ;
(2) (начиная с C11)
1) Возвращает длину заданной нуль-терминированной байтовой строки, то есть количество символов в массиве символов, на первый элемент которого указывает str до первого нулевого символа, не включая его.
Поведение не определено, если str не является указателем на байтовую строку, завершающуюся нулевым символом.
2) То же, что и (1) , за исключением того, что функция возвращает ноль, если str является нулевым указателем, и возвращает strsz , если нулевой символ не был найден в первых strsz байтах str .
Поведение не определено, если str не является указателем на байтовую строку с нулевым завершением и strsz больше размера этого символьного массива.
Как и для всех функций с проверкой границ, strnlen_s гарантированно доступна только если __STDC_LIB_EXT1__ определена реализацией и если пользователь определяет __STDC_WANT_LIB_EXT1__ как целочисленную константу 1 перед включением <string.h> .

Содержание

Параметры

str - указатель на проверяемую нуль-терминированную байтовую строку
strsz - максимальное количество символов для проверки

Возвращаемое значение

1) Длина байтовой строки с нулевым завершителем str .
2) Длина байтовой строки с нулевым завершителем str при успехе, ноль если str является нулевым указателем, strsz если нулевой символ не был найден.

Примечания

strnlen_s и wcsnlen_s являются единственными функциями с проверкой границ , которые не вызывают обработчик ограничений времени выполнения. Это чисто служебные функции, используемые для обеспечения ограниченной поддержки строк без нулевого завершения.

Пример

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <string.h>
int main(void)
{
    const char str[] = "How many characters does this string contain?";
    printf("without null character: %zu\n", strlen(str));
    printf("with null character:    %zu\n", sizeof str);
#ifdef __STDC_LIB_EXT1__
    printf("without null character: %zu\n", strnlen_s(str, sizeof str));
#endif
}

Возможный вывод:

without null character: 45
with null character:    46
without null character: 45

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.24.6.3 Функция strlen (стр.: TBD)
  • K.3.7.4.4 Функция strnlen_s (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.24.6.3 Функция strlen (стр.: TBD)
  • K.3.7.4.4 Функция strnlen_s (стр.: TBD)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.24.6.3 Функция strlen (стр. 372)
  • K.3.7.4.4 Функция strnlen_s (стр. 623)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.21.6.3 Функция strlen (стр: 334)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.11.6.3 Функция strlen

Смотрите также

(C95) (C11)
возвращает длину широкой строки
(функция)
возвращает количество байтов в следующем многобайтовом символе
(функция)
C++ documentation для strlen