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_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 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 mit str
Ausnahme des Terminal-NULL-Werts zurück. 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.
Bemerkungen
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. Wie Sie dies ändern, erfahren Sie unter Globaler Status in der CRT.
Zuordnung generischer Textroutinen
TCHAR.H Routine |
_UNICODE &_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 wird von der Einstellung der LC_CTYPE
Kategorieeinstellung des Locale beeinflusst. setlocale
Weitere Informationen finden Sie unter . 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 zurückgegebener Wert | Erforderlicher Header |
---|---|
strlen |
<string.h> |
wcslen |
<string.h> oder <wchar.h> |
_mbslen , _mbslen_l |
<mbstring.h> |
_mbstrlen , _mbstrlen_l |
<stdlib.h> |
Zusätzliche Informationen zur Kompatibilität finden Sie unter Compatibility.
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
Zeichenfolgenbearbeitung
Interpretation von Multibyte-Character Sequenzen
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