Udostępnij za pośrednictwem


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

Pobiera długość ciągu, przy użyciu bieżących ustawień regionalnych lub określonego ustawień regionalnych.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óre są wykonywane w środowiska wykonawczego systemu Windows.Aby uzyskać więcej informacji, zobacz funkcji CRT nie obsługują /ZW.

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
    Ciąg zerem.

  • locale
    Ustawienia regionalne do użycia.

Wartość zwracana

Każda z tych funkcji zwraca liczbę znaków w str, z wyłączeniem terminal NULL.Nie zwraca wartości jest zarezerwowany do wskazania błąd, z wyjątkiem _mbstrlen i _mbstrlen_l, które zwraca ((size_t)(-1)) Jeśli ciąg zawiera nieprawidłowy znak wielobajtowych.

Uwagi

strleninterpretuje ciągu jako ciąg znaków, dzięki czemu można jej wartość zwracaną zawsze taki sam, jak liczba bajtów, nawet jeśli ciąg zawiera znaki wielobajtowe.wcslento wersja całego znaku strlen; w argumencie wcslen jest ciągiem znaków wide i liczby znaków znajduje się w sieci (dwubajtowych) znaków.wcslen i strlen zachowują się identycznie w innych przypadkach.

Uwaga dotycząca zabezpieczeń tych funkcji straty potencjalne zagrożenie spowodowanych problem przepełnienie buforu.Przepełnienie buforu problemy są często metody ataku systemu, powodując nienależną podniesienie poziomu uprawnień.Aby uzyskać więcej informacji, zobacz Unikanie przepełnień bufora.

Mapowania procedur zwykłego tekstu

Procedura TCHAR.H

_UNICODE & _MBCS nie zdefiniowano

_MBCS zdefiniowano

_UNICODE zdefiniowano

_tcslen

strlen

strlen

wcslen

_tcsclen

strlen

_mbslen

wcslen

_tcsclen_l

strlen

_mbslen_l

wcslen

_mbsleni _mbslen_l zwrócona liczba znaków wielobajtowych w ciągu znaków wielobajtowych, ale nie Testuj znaków wielobajtowych ważności._mbstrleni _mbstrlen_l testowanie znaków wielobajtowych ważności i rozpoznaje sekwencje znaków wielobajtowych.Jeśli ciąg przekazany do _mbstrlen lub _mbstrlen_l zawiera nieprawidłowy znak wielobajtowych dla strony kodowej, funkcja zwraca wartość -1 i zestawy errno do EILSEQ.

Wartość danych wyjściowych ma wpływ ustawienie LC_CTYPE kategorii ustawienia określone w ustawieniach regionalnych; zobacz setlocale uzyskać więcej informacji.Wersje tych funkcji bez _l sufiks potrzeby bieżące ustawienia regionalne to zachowanie zależne od ustawień regionalnych; wersje z _l sufiks są identyczne z wyjątkiem tego, aby używały ustawień regionalnych parametr przekazany w zamian.Aby uzyskać więcej informacji, zobacz Regionalne.

Wymagania

Procedura

Wymagany nagłówek

strlen

< string.h >

wcslen

< 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.

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 wielobajtowych sekwencji znaków

Regionalne

setlocale, _wsetlocale

strcat, wcscat, _mbscat

strcmp, wcscmp, _mbscmp

strcoll — Funkcje

strcpy, wcscpy, _mbscpy

strrchr, wcsrchr, _mbsrchr, _mbsrchr_l

_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l

strspn, wcsspn, _mbsspn, _mbsspn_l