Sdílet prostřednictvím


strnlen, strnlen_s, wcsnlen, , _mbsnlenwcsnlen_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 , , _mbslenwcslen, _mbslen_l, _mbstrlen. _mbstrlen_lstrlen

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 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 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 wcsnlenneověř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.

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