strlen, strnlen_s
From cppreference.net
|
Определено в заголовочном файле
<string.h>
|
||
|
size_t
strlen
(
const
char
*
str
)
;
|
(1) | |
| (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
|
|