strnlen
, strnlen_s
, , wcsnlen
, _mbsnlen
wcsnlen_s
, , _mbsnlen_l
, , _mbstrnlen
_mbstrnlen_l
Pobiera długość ciągu przy użyciu bieżących ustawień regionalnych lub tych, które zostały przekazane. Te funkcje są bezpieczniejsze wersje strlen
, , wcslen
, _mbslen
_mbslen_l
, _mbstrlen
, _mbstrlen_l
.
Ważne
_mbsnlen
, _mbsnlen_l
, _mbstrnlen
i _mbstrnlen_l
nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows. Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane w aplikacjach platforma uniwersalna systemu Windows.
Składnia
size_t strnlen(
const char *str,
size_t numberOfElements
);
size_t strnlen_s(
const char *str,
size_t numberOfElements
);
size_t wcsnlen(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_s(
const wchar_t *str,
size_t numberOfElements
);
size_t _mbsnlen(
const unsigned char *str,
size_t numberOfElements
);
size_t _mbsnlen_l(
const unsigned char *str,
size_t numberOfElements,
_locale_t locale
);
size_t _mbstrnlen(
const char *str,
size_t numberOfElements
);
size_t _mbstrnlen_l(
const char *str,
size_t numberOfElements,
_locale_t locale
);
Parametry
str
Ciąg zakończony wartością null.
numberOfElements
Rozmiar buforu ciągu.
locale
Ustawienia regionalne do użycia.
Wartość zwracana
Te funkcje zwracają liczbę znaków w ciągu, a nie w tym znak null zakończenia. Jeśli w pierwszych numberOfElements
bajtach ciągu (lub znakach szerokich wcsnlen
) nie ma wartości null, zwracany jest parametr , aby numberOfElements
wskazać warunek błędu; ciągi zakończone wartością null mają długości, które są ściśle mniejsze niż numberOfElements
.
_mbstrnlen
i _mbstrnlen_l
zwraca -1, jeśli ciąg zawiera nieprawidłowy znak wielobajtowy.
Uwagi
Uwaga
strnlen
nie strlen
zastępuje elementu ; strnlen
ma być używany tylko do obliczania rozmiaru przychodzących niezaufanych danych w buforze o znanym rozmiarze — na przykład pakietu sieciowego. strnlen
oblicza długość, ale nie przechodzi poza koniec buforu, jeśli ciąg jest nieokreślony. W innych sytuacjach użyj polecenia strlen
. (To samo dotyczy wcsnlen
, _mbsnlen
i _mbstrnlen
.)
Każda z tych funkcji zwraca liczbę znaków w str
elemecie , a nie zawiera znaku zerowego zakończenia. strnlen
Jednak i strnlen_s
interpretować ciąg jako ciąg znaków jednobajtowych, a zatem wartość zwracana jest zawsze równa liczbie bajtów, nawet jeśli ciąg zawiera znaki wielobajtowe. wcsnlen
i wcsnlen_s
są odpowiednio wersjami strnlen
znaków i strnlen_s
; argumenty dla wcsnlen
i wcsnlen_s
są ciągami szerokoznakowymi, a liczba znaków jest w jednostkach szerokich znaków. wcsnlen
W przeciwnym razie i strnlen
zachowują się identycznie, jak strnlen_s
i wcsnlen_s
.
strnlen
, wcsnlen
i _mbsnlen
nie weryfikuj ich parametrów. Jeśli str
jest NULL
to , następuje naruszenie dostępu.
strnlen_s
i wcsnlen_s
zweryfikuj ich parametry. Jeśli str
parametr ma NULL
wartość , funkcje zwracają wartość 0.
_mbstrnlen
weryfikuje również jego parametry. Jeśli str
parametr ma NULL
wartość , lub numberOfElements
jest większy niż INT_MAX
, _mbstrnlen
generuje nieprawidłowy wyjątek parametru, zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonywanie jest dozwolone do kontynuowania, _mbstrnlen
ustawia wartość EINVAL
errno
i zwraca wartość -1.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Mapowania procedur tekstu ogólnego
TCHAR.H rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_tcsnlen |
strnlen |
strnlen |
wcsnlen |
_tcscnlen |
strnlen |
_mbsnlen |
wcsnlen |
_tcscnlen_l |
strnlen |
_mbsnlen_l |
wcsnlen |
_mbsnlen
i _mbstrnlen
zwraca liczbę znaków wielobajtowych w ciągu wielobajtowym. _mbsnlen
rozpoznaje sekwencje wielobajtowe według strony kodowej wielobajtowej, która jest obecnie używana lub zgodnie z ustawieniami regionalnymi, które są przekazywane; nie testuje ważności znaków wielobajtowych. _mbstrnlen
testuje ważność znaków wielobajtowych i rozpoznaje sekwencje znaków wielobajtowych. Jeśli przekazany _mbstrnlen
ciąg zawiera nieprawidłowy znak wielobajtowy, errno
jest ustawiony na EILSEQ
wartość .
Na wartość wyjściową ma wpływ ustawienie LC_CTYPE
ustawienia kategorii ustawień regionalnych. Aby uzyskać więcej informacji, zobacz setlocale
. Wersje tych funkcji są identyczne, z tą różnicą, że te, które nie mają _l
sufiksu, używają bieżących ustawień regionalnych dla tego zachowania zależnego od ustawień regionalnych i wersji, które mają _l
sufiks, zamiast tego używają parametru ustawień regionalnych, który jest przekazywany. Aby uzyskać więcej informacji, zobacz Ustawienia regionalne.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
strnlen , strnlen_s |
<string.h> |
wcsnlen , wcsnlen_s |
<string.h> lub <wchar.h> |
_mbsnlen , _mbsnlen_l |
<mbstring.h> |
_mbstrnlen , _mbstrnlen_l |
<stdlib.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// crt_strnlen.c
#include <string.h>
int main()
{
// str1 is 82 characters long. str2 is 159 characters long
char* str1 = "The length of a string is the number of characters\n"
"excluding the terminating null.";
char* str2 = "strnlen takes a maximum size. If the string is longer\n"
"than the maximum size specified, the maximum size is\n"
"returned rather than the actual size of the string.";
size_t len;
size_t maxsize = 100;
len = strnlen(str1, maxsize);
printf("%s\n Length: %d \n\n", str1, len);
len = strnlen(str2, maxsize);
printf("%s\n Length: %d \n", str2, len);
}
The length of a string is the number of characters
excluding the terminating null.
Length: 82
strnlen takes a maximum size. If the string is longer
than the maximum size specified, the maximum size is
returned rather than the actual size of the string.
Length: 100
Zobacz też
Manipulowanie ciągami
ustawienia regionalne
Interpretacja sekwencji znaków wielobajtowych
setlocale
, _wsetlocale
strncat
, , _strncat_l
, wcsncat
, _wcsncat_l
, , _mbsncat
_mbsncat_l
strncmp
, , wcsncmp
, , _mbsncmp
_mbsncmp_l
strcoll
, funkcje
strncpy_s
, , _strncpy_s_l
, wcsncpy_s
, _wcsncpy_s_l
, , _mbsncpy_s
_mbsncpy_s_l
strrchr
, , wcsrchr
, , _mbsrchr
_mbsrchr_l
_strset
, , _strset_l
, _wcsset
, _wcsset_l
, , _mbsset
_mbsset_l
strspn
, , wcsspn
, , _mbsspn
_mbsspn_l