Udostępnij za pośrednictwem


funkcji strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l

Uzyskaj długość ciągu, przy użyciu bieżących ustawień regionalnych lub określone ustawienia regionalne.Bezpieczniejsze wersje te funkcje są dostępne; Zobaczstrnlen, strnlen_s, strnlen_l, wcsnlen, wcsnlen_s, wcsnlen_l, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l

Ważna uwagaWażne

_mbslen, _mbslen_l, _mbstrlen, i _mbstrlen_l nie można używać w aplikacji, których wykonywanie w czasie wykonywania systemu Windows.Aby uzyskać więcej informacji, zobacz CRT funkcje nie obsługiwane przez /ZW.

size_t strlen(
   const char *str
);
size_t strlen_l(
   const char *str,
   _locale_t locale 
);
size_t wcslen(
   const wchar_t *str 
);
size_t wcslen_l(
   const wchar_t *str,
   _locale_t locale
);
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
    Ciąg zakończony znakiem null.

  • locale
    Ustawienia regionalne używane.

Wartość zwracana

Każda z tych funkcji zwraca liczbę znaków w str, z wyłączeniem terminal NULL.Jest zarezerwowana nie zwraca żadnej wartości, jeżeli wystąpił błąd, z wyjątkiem _mbstrlen, która oblicza ((size_t)(-1)) Jeśli ciąg zawiera nieprawidłowy znak wielobajtowych.

Uwagi

strleninterpretuje ciąg jako ciąg znaków, dzięki czemu swojej zwracanej wartości jest zawsze równa liczbie bajtów, nawet, jeśli ciąg zawiera znaki wielobajtowe.wcslenjest ona szerokich znaków do strlen; argument wcslen jest ciągiem szerokich znaków, a liczba znaków jest w szerokości (dwubajtowy), znaki.wcsleni strlen zachowują się identycznie inaczej.

Uwaga zabezpieczeń tych funkcji ponieść potencjalne zagrożenie spowodowane przez problem przepełnienie buforu.Przepełnienie buforu problemy są używanej metody ataku system, skutkujących nieuzasadnione podniesienie uprawnień.Aby uzyskać więcej informacji, zobacz Unikanie przekroczeniem buforu.

Tekst rodzajowy rutynowych mapowania

TCHAR.Rozpoczęto wykonywanie procedury h

_UNICODE & _MBCS nie zdefiniowany

_MBCS, definicja

_UNICODE, definicja

_tcslen

strlen

strlen

wcslen

_tcsclen

strlen

_mbslen

wcslen

_tcsclen_l

strlen_l

_mbslen_l

wcslen_l

_mbslen,_mbslen_l, _mbstrlen i _mbstrlen_l zwraca liczbę znaków wielobajtowych w łańcuch znaków, ale nie sprawdzają się dla ważności znaków wielobajtowych._mbstrleni _mbstrlen_l testy poprawności znaków wielobajtowych i rozpoznaje sekwencje znaków wielobajtowychsetLocale, _wsetlocale.Jeśli ciąg przekazany do _mbstrlen lub _mbstrlen_l zawiera nieprawidłowy znak wielobajtowych strona kodowa zwraca -1 i zestawy errno do EILSEQ.

Wartość produkcji jest zależny od ustawienia z LC_CTYPE kategorii ustawienie regionalne tzn. zobacz setlocale Aby uzyskać więcej informacji.Wersje te funkcje, bez _l sufiks Użyj bieżących ustawień regionalnych tego zachowania zależne od ustawień lokalnych; wersje z _l sufiks są identyczne z tym, że używają zamiast przekazany parametr ustawień regionalnych.Aby uzyskać więcej informacji, zobacz Ustawienia regionalne.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

strlen

<string.h>

strlen_l

<string.h>

wcslen, wcslen_l

<string.h> lub <wchar.h>

_mbslen, _mbslen_l

<mbstring.h>

_mbstrlen, _mbstrlen_l

<stdlib.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.

Przykład

// 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) );

   // wstrlen 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) );   
  
}
  

Odpowiednik w programie .NET Framework

System::String::length

Zobacz też

Informacje

Manipulowanie ciągami (CRT)

Interpretacja sekwencje znaków wielobajtowych

Ustawienia regionalne

setLocale, _wsetlocale

strcat, wcscat, _mbscat

strcmp, wcscmp, _mbscmp

Funkcje strcoll

strcpy, wcscpy, _mbscpy

strrchr, wcsrchr, _mbsrchr, _mbsrchr_l

_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l

strspn, wcsspn, _mbsspn, _mbsspn_l