strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l

Ruft die Länge einer Zeichenfolge mithilfe des aktuellen Gebietsschemas oder einem angegebenen Gebietsschema ab. Sicherere Versionen dieser Funktionen sind verfügbar; siehe strnlen, , , strnlen_swcsnlen, wcsnlen_s, _mbsnlen, _mbsnlen_l, , _mbstrnlen_mbstrnlen_l

Wichtig

_mbslen, _mbslen_l, _mbstrlen und _mbstrlen_l können nicht in Anwendungen eingesetzt werden, die in Windows-Runtime ausgeführt werden. Weitere Informationen finden Sie im Artikel CRT functions not supported in Universal Windows Platform apps (In Apps für die universelle Windows-Plattform nicht unterstützte CRT-Funktionen).

Syntax

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

Parameter

str
Mit NULL endende Zeichenfolge.

locale
Zu verwendendes Gebietsschema.

Rückgabewert

Jede dieser Funktionen gibt die Anzahl der Zeichen in str, mit Ausnahme des Terminal null. Es ist kein Rückgabewert zur Fehleranzeige reserviert, mit Ausnahme von _mbstrlen und _mbstrlen_l, die ((size_t)(-1)) zurückgeben, wenn die Zeichenfolge ein ungültiges Multibytezeichen enthält.

Hinweise

strlen interpretiert die Zeichenfolge als Einzelbytezeichenfolge, sodass der Rückgabewert immer der Anzahl von Bytes entspricht, selbst wenn die Zeichenfolge Multibytezeichen enthält. wcslen ist eine Breitzeichenversion von strlen. Das Argument von wcslen ist eine Zeichenfolge mit Breitzeichen, und die Anzahl von Zeichen wird in (2-Byte-)Breitzeichen angegeben. wcslen und strlen verhalten sich andernfalls identisch.

Sicherheitshinweis: Diese Funktionen stellen eine mögliche Bedrohung aufgrund eines Pufferüberlaufproblems dar. Pufferüberlaufprobleme werden häufig bei Systemangriffen eingesetzt, da sie zu einer unbefugten Ausweitung der Berechtigungen führen. Weitere Informationen finden Sie unter Vermeiden von Pufferüberläufen.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Generische Textroutinzuordnungen

TCHAR.H Routine _UNICODE und _MBCS nicht definiert _MBCS Definiert _UNICODE Definiert
_tcslen strlen strlen wcslen
_tcsclen strlen _mbslen wcslen
_tcsclen_l strlen _mbslen_l wcslen

_mbslen und _mbslen_l gibt die Anzahl von Multibyte-Zeichen in einer Multibyte-Zeichenfolge zurück, aber sie testen nicht auf Die Gültigkeit von Multibytezeichen. _mbstrlen und _mbstrlen_l überprüfen die Gültigkeit von Multibytezeichen und erkennen Multibyte-Zeichenfolgen. Wenn die an _mbstrlen oder _mbstrlen_l übergebene Zeichenfolge ein ungültiges Multibytezeichen für die Codepage enthält, gibt sie "– 1" zurück und legt errno auf EILSEQ fest.

Der Ausgabewert wird durch die Einstellung der LC_CTYPE Kategorieeinstellung des Gebietsschemas beeinflusst. Weitere Informationen finden Sie unter setlocale. Die Versionen dieser Funktionen ohne das _l-Suffix verwenden das aktuelle Gebietsschema für dieses vom Gebietsschema abhängige Verhalten; die Versionen mit dem _l-Suffix sind beinahe identisch, verwenden jedoch stattdessen den ihnen übergebenen Gebietsschemaparameter. Weitere Informationen finden Sie unter Locale.

Anforderungen

Routine Erforderlicher Header
strlen <string.h>
wcslen <string.h> oder <wchar.h>
_mbslen, _mbslen_l <mbstring.h>
_mbstrlen, _mbstrlen_l <stdlib.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

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

Siehe auch

Zeichenfolgenmanipulation
Interpretation von Multibyte-Zeichensequenzen
Gebietsschema
setlocale, _wsetlocale
strcat, wcscat, _mbscat
strcmp, wcscmp, _mbscmp
strcoll-Funktionen
strcpy, wcscpy, _mbscpy
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l
_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l
strspn, wcsspn, _mbsspn, _mbsspn_l