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
См. также
|
(C95)(C11) |
возвращает длину широкой строки (функция) |
| возвращает число байтов в следующем многобайтовом символе (функция) |
|
Документация C++ для strlen |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/byte/strlen