Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 _mbstrlen_l
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( // See note in remarks section about linkage
const char *str,
size_t numberOfElements
);
size_t wcsnlen(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_s( // See note in remarks section about linkage
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 strlenza ; 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, _mbsnlena _mbstrnlen.)
Každá z těchto funkcí vrátí počet znaků, které strneobsahují 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.
wcsnlena wcsnlen_s jsou verze širokého znaku strnlen a strnlen_s v uvedeném pořadí; argumenty pro wcsnlenwcsnlen_s řetězce širokého znaku a počet znaků jsou v jednotkách širokých znaků. Jinak a wcsnlen chovat se stejně, jako a strnlenstrnlen_s.wcsnlen_s
strnlen
wcsnlen a _mbsnlenneověř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 NULLnebo 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.
Poznámka:
Pokud používáte sadu Windows SDK verze 10.0.26100.6901 a Visual Studio 2026 nebo novější společně strnlen_s a wcsnlen_s už static inline nejsou (interní propojení). Místo toho jsou inline (externí propojení).
Pokud se chcete vrátit k předchozímu chování, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 před zahrnutím jakýchkoli hlaviček CRT. Ve výchozím nastavení _STATIC_INLINE_UCRT_FUNCTIONS je nastavená hodnota 0.
Tato změna zvyšuje konformitu UCRT se standardem C++ a zlepšuje kompatibilitu s moduly C++.
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 EILSEQhodnotu .
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