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. Informationen dazu finden Sie unter strnlen, strnlen_s, wcsnlen, 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 unter CRT-Funktionen nicht mit /ZW unterstützt.
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 zurück, ohne das abschließende NULL-Zeichen. 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.
Zuordnung generischer Textroutinen
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 geben die Anzahl von Multibytezeichen in einer Multibyte-Zeichenfolge zurück, überprüfen jedoch nicht die Gültigkeit der 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 ist von der LC_CTYPE-Kategorieneinstellung des Gebietsschemas betroffen; 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) );
// 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) );
}
.NET Framework-Entsprechung
Siehe auch
Referenz
Zeichenfolgenbearbeitung (CRT)
Interpretation von Mehrbytezeichensequenzen
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l