Spec-Zone.ru › C

strlen, strnlen_s

Определено в заголовочном файле <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; другими словами, ошибочное значение 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 <string.h>
#include <stdio.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

Ссылки

  • Стандарт 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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/byte/strlen

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API