strnlen, strnlen_s, strnlen_l, wcsnlen, wcsnlen_s, wcsnlen_l, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l
Získá délku řetězce pomocí aktuální národní prostředí nebo jeden, který byl předán v.Jedná se o bezpečnější verze strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l.
![]() |
---|
_mbsnlen, _mbsnlen_l, _mbstrnlen, a _mbstrnlen_l nelze použít v aplikacích, které jsou spuštěny v Windows Runtime.Další informace naleznete v tématu CRT funkce nejsou podporovány s /ZW. |
size_t strnlen(
const char *str,
size_t numberOfElements
);
size_t strnlen_s(
const char *str,
size_t numberOfElements
);
size_t strnlen_l(
const char *str,
size_t numberOfElements,
_locale_t locale
);
size_t wcsnlen(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_s(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_l(
const wchar_t *str,
size_t numberOfElements,
_locale_t locale
);
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 zakončený hodnotou Null.numberOfElements
Velikost vyrovnávací paměti řetězců.locale
Chcete-li národní prostředí pro použití.
Vrácená hodnota
Tyto funkce vrácení počtu znaků v řetězci, nikoli včetně ukončující znak null.Pokud není null zakončení v rámci první numberOfElements bajtů řetězce (nebo široké znaky pro wcsnlen), pak numberOfElements je vrácena označují chybový stav; jsou řetězce zakončené znakem null délek, které jsou nezbytně menší než numberOfElements.
_mbstrnlena _mbstrnlen_l vrátí -1, pokud řetězec obsahuje neplatný vícebajtové znakové.
Poznámky
[!POZNÁMKA]
strnlennení náhradou za strlen; strnlenje určen pro použití pouze pro výpočet velikosti příchozí nedůvěryhodná data ve vyrovnávací paměti známé velikosti – například síťový paket.strnlenVypočítá délku, ale není projít za konec vyrovnávací paměti, pokud je nalezen neukončený řetězec.V jiných situacích použít strlen.(The same applies to wcsnlen, _mbsnlen, and _mbstrnlen.)
Každá z těchto funkcí vrací počet znaků v str, ne včetně ukončující znak null.Nicméně strnlen a strnlen_l interpretace řetězce jako jednobajtové znakové řetězce, a proto, vrácená hodnota je vždy rovna počtu bajtů, i v případě, že řetězec obsahuje vícebajtové znaky.wcsnlena wcsnlen_l jsou verze širokého znaku strnlen a strnlen_l ; argumenty pro wcsnlen a wcsnlen_l jsou řetězci širokého znaku a počet znaků v jednotkách širokého znaku.Otherwise, wcsnlen, wcsnlen_l, strnlen and strnlen_l behave identically.
strnlen, wcsnlen, a _mbsnlen nelze ověřit jejich parametry.Pokud str je NULL, dochází k narušení přístupu.
strnlen_sa wcsnlen_s ověřit jejich parametry.Pokud str je NULL, funkce vrátí 0.
_mbstrnlenověřuje také jeho parametry.Pokud str je NULL, nebo -li numberOfElements je větší než INT_MAX, _mbstrnlen generuje výjimku neplatného parametru, jak je popsáno v Ověření parametrů.Je-li pokračovat, je povoleno zpracování _mbstrnlen nastaví errno na EINVAL a vrátí hodnotu -1.
Mapování rutiny obecného textu
TCHAR.Byla zahájena rutina h |
_UNICODE & _MBCS není definováno |
_MBCS, definice |
_UNICODE definována |
---|---|---|---|
_tcsnlen |
strnlen |
strnlen |
wcsnlen |
_tcscnlen |
strnlen |
_mbsnlen |
wcsnlen |
_tcscnlen_l |
strnlen_l |
_mbsnlen_l |
wcsnlen_l |
_mbsnlena _mbstrnlen vrácení počtu vícebajtových znaků vícebajtové znakové řetězce._mbsnlenrozpozná vícebajtové znakové sekvence podle vícebajtovou znakovou stránku, která je aktuálně používán nebo podle národního prostředí, které jsou předány v; netestuje platnost vícebajtových znaků._mbstrnlenověří platnost vícebajtové znakové a rozpozná vícebajtové znakové sekvence.Pokud řetězec, který je předán do _mbstrnlen obsahuje neplatný vícebajtové znakové errno je nastavena na EILSEQ.
Výstupní hodnota je ovlivněna nastavením LC_CTYPE kategorie nastavení národního prostředí; Viz setlocale _wsetlocale Další informace.Verze tyto funkce jsou stejné, s tím rozdílem, že ty, které nechcete mít _l příponu použít aktuální národní prostředí pro toto chování závislé na národním prostředí a verze, které mají _l přípony, použijte parametr locale, který je předaný v.Další informace naleznete v tématu Národní prostředí.
Požadavky
Byla zahájena rutina |
Požadované záhlaví |
---|---|
strnlen, strnlen_s, strnlen_l |
<string.h> |
wcsnlen, wcsnlen_s, wcsnlen_l |
<string.h> nebo <wchar.h> |
_mbsnlen, _mbsnlen_l |
<mbstring.h> |
_mbstrnlen, _mbstrnlen_l |
<stdlib.h> |
Další informace o kompatibilitě, viz 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);
}
Ekvivalent v rozhraní .NET Framework
Viz také
Referenční dokumentace
Výklad vícebajtové znakové sekvence
strncat, _strncat_l, wcsncat, wcsncat_l, _mbsncat _mbsncat_l
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l