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 больше размера этого массива символов. Как и все функции с проверкой границ, 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++ для strlen |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/string/byte/strlen