strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
Rufen Sie die Länge einer Zeichenfolge, unter Verwendung des aktuellen Gebietsschemas oder eines angegebenen Gebietsschemas ab.Sicherere Versionen dieser Funktionen sind verfügbar; finden Sie unter strnlen, strnlen_s, strnlen_l, wcsnlen, wcsnlen_s, wcsnlen_l, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l
Wichtig |
---|
_mbslen, _mbslen_l, _mbstrlen und _mbstrlen_l können in Anwendungen nicht verwendet werden, die in der Windows Runtime ausführen.Weitere Informationen finden Sie unter CRT-Funktionen unterstützt nicht mit /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 );
Parameter
str
Auf NULL endende Zeichenfolge.locale
Zu verwendende Gebietsschema.
Rückgabewert
Jede dieser Funktionen gibt die Anzahl der Zeichen in str, ausschließlich End-NULL zurück.Kein Rückgabewert wird reserviert, um einen Fehler, außer _mbstrlen anzugeben, der ((size_t)(-1)) zurückgibt, wenn die Zeichenfolge ein ungültiges Mehrbytezeichen enthält.
Hinweise
strlen interpretiert die Zeichenfolge als Einzelbyte-Zeichenfolge, deshalb ist der Rückgabewert immer gleich der Anzahl von Bytes, auch wenn die Zeichenfolge Mehrbytezeichen enthält.wcslen ist eine Breitzeichen-Version von strlen; das Argument von wcslen ist eine Zeichenfolge mit Breitzeichen und ist die Anzahl von Zeichen in den großen 2-Byte- () Zeichen.wcslen und strlen verhalten sich andernfalls identisch.
Sicherheitshinweis diese Funktionen verursachen eine potenzielle Bedrohung, die durch ein Pufferüberlaufprobleme hin bewerkstelligt wird.Pufferüberlaufprobleme sind eine häufige Methode des Systemangriffs, Ergebnis einer autorisierten Ausweitung seine Berechtigungen ausweitet.Weitere Informationen finden Sie unter Vermeiden von Pufferüberläufen.
Zuordnung generische Textroutinen
TCHAR.H-Routine |
_UNICODE & _MBCS nicht definiert. |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_tcslen |
strlen |
strlen |
wcslen |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_l |
strlen_l |
_mbslen_l |
wcslen_l |
_mbslen,_mbslen_l, _mbstrlen und _mbstrlen_l geben die Anzahl der Mehrbytezeichen in einer Mehrbyte-Zeichenfolge jedoch nicht für Mehrbytezeichengültigkeit testen._mbstrlen und _mbstrlen_l Tests für Mehrbytezeichengültigkeit und erkennt Mehrbytezeichensequenzen setlocale, _wsetlocale.Wenn die Zeichenfolge, die an _mbstrlen übergeben oder _mbstrlen_l ein ungültiges Mehrbytezeichen für die Codepage enthalten, gibt sie -1 zurück und legt errno zu EILSEQ fest.
Der Ausgabewert wird durch die Einstellung der LC_CTYPE Kategorieneinstellung des Gebietsschemas betroffen; setlocale finden Sie weitere Informationen.Die Versionen dieser Funktionen ohne das _l Suffix verwenden das aktuelle Gebietsschema für dieses Verhalten abhängig; die Versionen mit dem _l Suffix sind identisch, allerdings verwenden den Gebietsschemaparameter, der in stattdessen übergeben wird.Weitere Informationen finden Sie unter Gebietsschema.
Anforderungen
Routine |
Erforderlicher Header |
---|---|
strlen |
<string.h> |
strlen_l |
<string.h> |
wcslen, wcslen_l |
<string.h> oder <wchar.h> |
_mbslen, _mbslen_l |
<mbstring.h> |
_mbstrlen, _mbstrlen_l |
<stdlib.h> |
So zusätzlicher Kompatibilitätsinformation finden Sie unter Kompatibilität in der Einführung.
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 Mehrbytezeichen-Sequenzen
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l