strnlen
, strnlen_s
, wcsnlen
, , _mbsnlen
wcsnlen_s
, _mbsnlen_l
, , _mbstrnlen
_mbstrnlen_l
Získá délku řetězce pomocí aktuálního národního prostředí nebo té, která byla předána. Tyto funkce jsou bezpečnější verze , , _mbslen
wcslen
, _mbslen_l
, _mbstrlen
. _mbstrlen_l
strlen
Důležité
_mbsnlen
, _mbsnlen_l
_mbstrnlen
, a _mbstrnlen_l
nelze použít v aplikacích, které se spouští v prostředí Windows Runtime. Další informace najdete v tématu Funkce CRT, které nejsou v aplikacích Univerzální platforma Windows podporované.
Syntaxe
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
Řetězec ukončený hodnotou null.
numberOfElements
Velikost vyrovnávací paměti řetězce.
locale
Národní prostředí, které se má použít.
Vrácená hodnota
Tyto funkce vrátí počet znaků v řetězci, nikoli ukončující znak null. Pokud v prvních numberOfElements
bajtech řetězce neexistuje žádný ukončovací znak null (nebo široké znaky wcsnlen
), numberOfElements
vrátí se k označení chybové podmínky. Řetězce s ukončenou hodnotou null mají délku, která je přísně menší než numberOfElements
.
_mbstrnlen
a _mbstrnlen_l
vrátí -1, pokud řetězec obsahuje neplatný vícebajtový znak.
Poznámky
Poznámka:
strnlen
není náhradou strlen
za ; strnlen
je určena pouze k výpočtu velikosti příchozích nedůvěryhodných dat v vyrovnávací paměti známé velikosti – například síťového paketu. strnlen
vypočítá délku, ale neprojde po konci vyrovnávací paměti, pokud je řetězec neukončen. V jiných situacích použijte strlen
. (Totéž platí pro wcsnlen
, _mbsnlen
a _mbstrnlen
.)
Každá z těchto funkcí vrátí počet znaků, které str
neobsahují ukončující znak null. strnlen
strnlen_s
Řetězec však interpretujte jako řetězec jednobajtového znaku, a proto se návratová hodnota vždy rovná počtu bajtů, i když řetězec obsahuje vícebajtové znaky. wcsnlen
a wcsnlen_s
jsou verze širokého znaku strnlen
a strnlen_s
v uvedeném pořadí; argumenty pro wcsnlen_s
wcsnlen
řetězce širokého znaku a počet znaků jsou v jednotkách širokých znaků. Jinak a wcsnlen
chovat se stejně, jako a strnlen_s
wcsnlen_s
.strnlen
strnlen
_mbsnlen
a wcsnlen
neověřujte jejich parametry. Pokud str
ano NULL
, dojde k narušení přístupu.
strnlen_s
a wcsnlen_s
ověřte jejich parametry. Pokud str
ano NULL
, vrátí funkce hodnotu 0.
_mbstrnlen
také ověří jeho parametry. Pokud str
je NULL
nebo numberOfElements
je větší než INT_MAX
, _mbstrnlen
vygeneruje neplatnou výjimku parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, _mbstrnlen
nastaví errno
hodnotu EINVAL
-1 a vrátí hodnotu -1.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Mapování rutin obecného textu
TCHAR.H rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_tcsnlen |
strnlen |
strnlen |
wcsnlen |
_tcscnlen |
strnlen |
_mbsnlen |
wcsnlen |
_tcscnlen_l |
strnlen |
_mbsnlen_l |
wcsnlen |
_mbsnlen
a _mbstrnlen
vrátí počet vícebajtových znaků v řetězci s vícebajtovými znaky. _mbsnlen
rozpozná vícebajtové sekvence znaků podle vícebajtové znakové stránky, která je aktuálně používána, nebo podle národního prostředí, které je předáno; testuje platnost vícebajtového znaku. _mbstrnlen
testuje platnost vícebajtových znaků a rozpozná vícebajtové sekvence znaků. Pokud řetězec předaný _mbstrnlen
obsahuje neplatný vícebajtový znak, errno
je nastaven na EILSEQ
hodnotu .
Výstupní hodnota je ovlivněna nastavením LC_CTYPE
nastavení kategorie národního prostředí. Další informace najdete na webu setlocale
. Verze těchto funkcí jsou stejné, s výjimkou těch, které nemají příponu _l
, používají aktuální národní prostředí pro toto chování závislé na národním prostředí a verze, které mají příponu _l
, místo toho používají předaný parametr národního prostředí. Další informace naleznete v tématu Národní prostředí.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
strnlen , strnlen_s |
<string.h> |
wcsnlen , wcsnlen_s |
<string.h> nebo <wchar.h> |
_mbsnlen , _mbsnlen_l |
<mbstring.h> |
_mbstrnlen , _mbstrnlen_l |
<stdlib.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// 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
Viz také
Manipulace s řetězci
Národní prostředí
Interpretace vícebajtových sekvencí znaků
setlocale
, _wsetlocale
strncat
, _strncat_l
, wcsncat
, _wcsncat_l
, , _mbsncat
_mbsncat_l
strncmp
, wcsncmp
, , _mbsncmp
_mbsncmp_l
strcoll
– funkce
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