strlen, wcslen, _mbslen, _mbslen_l, , _mbstrlen_mbstrlen_l

Získá délku řetězce pomocí aktuálního národního prostředí nebo zadaného národního prostředí. K dispozici jsou bezpečnější verze těchto funkcí; viz strnlen, , strnlen_s, wcsnlen, _mbsnlenwcsnlen_s, , _mbstrnlen_mbsnlen_l_mbstrnlen_l

Důležité

_mbslen, _mbslen_l_mbstrlen, a _mbstrlen_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 strlen(
   const char *str
);
size_t wcslen(
   const wchar_t *str
);
size_t _mbslen(
   const unsigned char *str
);
size_t _mbslen_l(
   const unsigned char *str,
   _locale_t locale
);
size_t _mbstrlen(
   const char *str
);
size_t _mbstrlen_l(
   const char *str,
   _locale_t locale
);

Parametry

str
Řetězec ukončený hodnotou null.

locale
Národní prostředí, které se má použít.

Vrácená hodnota

Každá z těchto funkcí vrátí počet znaků v str, s výjimkou terminálu null. Žádná návratová hodnota není vyhrazena k označení chyby, s výjimkou _mbstrlen a _mbstrlen_l, která vrátí ((size_t)(-1)) , pokud řetězec obsahuje neplatný vícebajtový znak.

Poznámky

strlen interpretuje řetězec jako řetězec jednobajtového znaku, takže jeho návratová hodnota se vždy rovná počtu bajtů, i když řetězec obsahuje vícebajtové znaky. wcslen je verze širokého znaku strlen; argument je řetězec širokého wcslen znaku a počet znaků je v širokých (dvoubajtů). wcslen a strlen chovat se stejně jinak.

Bezpečnostní poznámka : Tyto funkce můžou představovat potenciální hrozbu, kterou způsobil problém s přetečením vyrovnávací paměti. Problémy s přetečením vyrovnávací paměti jsou častou metodou útoku na systém, což vede k neoprávněnému zvýšení oprávnění. Další informace najdete v tématu Zabránění přetečení vyrovnávací paměti.

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ý
_tcslen strlen strlen wcslen
_tcsclen strlen _mbslen wcslen
_tcsclen_l strlen _mbslen_l wcslen

_mbslen a _mbslen_l vrátí počet vícebajtových znaků v řetězci s vícebajtovými znaky, ale neotestují platnost vícebajtového znaku. _mbstrlen a _mbstrlen_l otestujte platnost vícebajtových znaků a rozpoznáte vícebajtové sekvence znaků. Pokud řetězec předaný _mbstrlen nebo _mbstrlen_l obsahuje neplatný vícebajtový znak pro znakovou stránku, vrátí funkce hodnotu -1 a nastaví errno hodnotu EILSEQ.

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í bez _l přípony používají aktuální národní prostředí pro toto chování závislé na národním prostředí. Verze s _l příponou jsou shodné s tím rozdílem, že 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
strlen <string.h>
wcslen <string.h> nebo <wchar.h>
_mbslen, _mbslen_l <mbstring.h>
_mbstrlen, _mbstrlen_l <stdlib.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

// crt_strlen.c
// Determine the length of a string. For the multi-byte character
// example to work correctly, the Japanese language support for
// non-Unicode programs must be enabled by the operating system.

#include <string.h>
#include <locale.h>

int main()
{
   char* str1 = "Count.";
   wchar_t* wstr1 = L"Count.";
   char * mbstr1;
   char * locale_string;

   // strlen gives the length of single-byte character string
   printf("Length of '%s' : %d\n", str1, strlen(str1) );

   // wcslen gives the length of a wide character string
   wprintf(L"Length of '%s' : %d\n", wstr1, wcslen(wstr1) );

   // A multibyte string: [A] [B] [C] [katakana A] [D] [\0]
   // in Code Page 932. For this example to work correctly,
   // the Japanese language support must be enabled by the
   // operating system.
   mbstr1 = "ABC" "\x83\x40" "D";

   locale_string = setlocale(LC_CTYPE, "Japanese_Japan");

   if (locale_string == NULL)
   {
      printf("Japanese locale not enabled. Exiting.\n");
      exit(1);
   }
   else
   {
      printf("Locale set to %s\n", locale_string);
   }

   // _mbslen will recognize the Japanese multibyte character if the
   // current locale used by the operating system is Japanese
   printf("Length of '%s' : %d\n", mbstr1, _mbslen(mbstr1) );

   // _mbstrlen will recognize the Japanese multibyte character
   // since the CRT locale is set to Japanese even if the OS locale
   // isnot.
   printf("Length of '%s' : %d\n", mbstr1, _mbstrlen(mbstr1) );
   printf("Bytes in '%s' : %d\n", mbstr1, strlen(mbstr1) );

}
Length of 'Count.' : 6
Length of 'Count.' : 6
Length of 'ABCァD' : 5
Length of 'ABCァD' : 5
Bytes in 'ABCァD' : 6

Viz také

Manipulace s řetězci
Interpretace vícebajtových sekvencí znaků
Národní prostředí
setlocale, _wsetlocale
strcat, , wcscat_mbscat
strcmp, , wcscmp_mbscmp
strcoll – funkce
strcpy, , wcscpy_mbscpy
strrchr, wcsrchr, , _mbsrchr_mbsrchr_l
_strset, _strset_l, _wcsset, _wcsset_l, , _mbsset_mbsset_l
strspn, wcsspn, , _mbsspn_mbsspn_l