Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ruft die Länge einer Zeichenfolge durch Verwendung des aktuellen oder einen übergebenen Gebietsschemas ab. Diese Funktionen sind sicherere Versionen von strlen, , wcslen, _mbslen_mbslen_l, . _mbstrlen_mbstrlen_l
Wichtig
_mbsnlen, _mbsnlen_l, _mbstrnlenund _mbstrnlen_l kann nicht in Anwendungen verwendet werden, die in der 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 strnlen(
const char *str,
size_t numberOfElements
);
size_t strnlen_s( // See note in remarks section about linkage
const char *str,
size_t numberOfElements
);
size_t wcsnlen(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_s( // See note in remarks section about linkage
const wchar_t *str,
size_t numberOfElements
);
size_t _mbsnlen(
const unsigned char *str,
size_t numberOfElements
);
size_t _mbsnlen_l(
const unsigned char *str,
size_t numberOfElements,
_locale_t locale
);
size_t _mbstrnlen(
const char *str,
size_t numberOfElements
);
size_t _mbstrnlen_l(
const char *str,
size_t numberOfElements,
_locale_t locale
);
Parameter
str
Mit NULL endende Zeichenfolge.
numberOfElements
Die Größe des Zeichenfolgenpuffers.
locale
Zu verwendendes Gebietsschema.
Rückgabewert
Diese Funktionen geben die Anzahl von Zeichen in der Zeichenfolge zurück (ohne das abschließende Nullzeichen). Wenn innerhalb der ersten numberOfElements Bytes der Zeichenfolge (oder breite Zeichen für wcsnlen) kein Null-Terminator vorhanden ist, numberOfElements wird zurückgegeben, um die Fehlerbedingung anzugeben. Null-beendete Zeichenfolgen weisen Längen auf, die streng kleiner sind als numberOfElements.
_mbstrnlen und _mbstrnlen_l geben -1 zurück, wenn die Zeichenfolge ein ungültiges Multibytezeichen enthält.
Hinweise
Hinweis
strnlen ist kein Ersatz für strlen; strnlen ist nur für eine Verwendung zur Berechnung der Größe nicht vertrauenswürdiger eingehender Daten in einem Puffer von bekannter Größe gedacht – z. B. eines Netzwerkpakets.
strnlen berechnet die Länge, geht jedoch nicht hinter das Ende des Puffers zurück, wenn die Zeichenfolge keinen Terminator aufweist. Verwenden Sie in anderen Situationen strlen. (Dasselbe gilt für wcsnlen, _mbsnlen und _mbstrnlen.)
Jede dieser Funktionen gibt die Anzahl von Zeichen in str zurück, jedoch ohne das NULL-Terminatorzeichen.
strnlen und strnlen_s interpretieren die Zeichenfolge allerdings als Einzelbytezeichenfolge, sodass der Rückgabewert immer der Anzahl von Bytes entspricht, selbst wenn die Zeichenfolge Multibytezeichen enthält.
wcsnlen und wcsnlen_s sind Breitzeichenversionen von strnlen bzw. strnlen_s; die Argumente für wcsnlen und wcsnlen_s sind Breitzeichen-Zeichenfolgen, und die Zeichenzählung erfolgt in Breitzeicheneinheiten. Andernfalls verhalten sich wcsnlen und strnlen identisch, ebenso strnlen_s und wcsnlen_s.
strnlen, wcsnlenund _mbsnlen überprüfen Sie ihre Parameter nicht. Wenn str gleich NULL ist, tritt eine Zugriffsverletzung auf.
strnlen_s und wcsnlen_s überprüfen die eigenen Parameter. Wenn str gleich NULL ist, geben die Funktionen 0 zurück.
_mbstrnlen überprüft auch die eigenen Parameter. Wenn str dies größer NULLals ist numberOfElementsINT_MAX, _mbstrnlen wird eine ungültige Parameter exception generiert, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, setzt _mbstrnlenerrno auf EINVAL und gibt -1 zurück.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Hinweis
Wenn Sie Windows SDK Version 10.0.26100.6901 und Visual Studio 2026 oder höher zusammen strnlen_s verwenden und wcsnlen_s nicht mehr static inline (interne Verknüpfung) sind. Stattdessen sind inline sie (externe Verknüpfung).
Um zum vorherigen Verhalten zurückzukehren, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 bevor Sie CRT-Header einschließen.
_STATIC_INLINE_UCRT_FUNCTIONS ist standardmäßig auf „0“ festgelegt.
Diese Änderung erhöht die UCRT-Konformität mit dem C++-Standard und verbessert die Kompatibilität mit C++-Modulen.
Mapping generischer Textroutinen
TCHAR.H-Routine |
_UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
|---|---|---|---|
_tcsnlen |
strnlen |
strnlen |
wcsnlen |
_tcscnlen |
strnlen |
_mbsnlen |
wcsnlen |
_tcscnlen_l |
strnlen |
_mbsnlen_l |
wcsnlen |
_mbsnlen und _mbstrnlen geben die Anzahl von Multibytezeichen in einer Multibytezeichenfolge zurück.
_mbsnlen erkennt Multibyte-Zeichensequenzen gemäß der Multibyte-Codepage, die derzeit verwendet wird, oder gemäß dem Gebietsschema, das übergeben wird; Es wird nicht auf Die Gültigkeit von Multibyte-Zeichen getestet.
_mbstrnlen überprüft die Gültigkeit von Multibytezeichen und erkennt Multibytezeichensequenzen. Wenn die an _mbstrnlen übergebene Zeichenfolge ein ungültiges Multibytezeichen enthält, wird errno auf EILSEQ gesetzt.
Der Ausgabewert wird durch die Einstellung der LC_CTYPE Kategorieeinstellung des Gebietsschemas beeinflusst. Weitere Informationen finden Sie unter setlocale. Die Versionen dieser Funktionen sind nahezu identisch, außer dass diejenigen ohne das _l-Suffix für dieses Gebietsschema-abhängige Verhalten das aktuelle Gebietsschema verwenden, und diejenigen mit _l-Suffix den übergebenen Gebietsschemaparameter. Weitere Informationen finden Sie unter Locale.
Anforderungen
| Routine | Erforderlicher Header |
|---|---|
strnlen, strnlen_s |
<string.h> |
wcsnlen, wcsnlen_s |
<string.h> oder <wchar.h> |
_mbsnlen, _mbsnlen_l |
<mbstring.h> |
_mbstrnlen, _mbstrnlen_l |
<stdlib.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_strnlen.c
#include <string.h>
int main()
{
// str1 is 82 characters long. str2 is 159 characters long
char* str1 = "The length of a string is the number of characters\n"
"excluding the terminating null.";
char* str2 = "strnlen takes a maximum size. If the string is longer\n"
"than the maximum size specified, the maximum size is\n"
"returned rather than the actual size of the string.";
size_t len;
size_t maxsize = 100;
len = strnlen(str1, maxsize);
printf("%s\n Length: %d \n\n", str1, len);
len = strnlen(str2, maxsize);
printf("%s\n Length: %d \n", str2, len);
}
The length of a string is the number of characters
excluding the terminating null.
Length: 82
strnlen takes a maximum size. If the string is longer
than the maximum size specified, the maximum size is
returned rather than the actual size of the string.
Length: 100
Siehe auch
Zeichenfolgenbearbeitung
Gebietsschema
Interpretation von Multibytezeichensequenzen
setlocale, _wsetlocale
strncat, , _strncat_lwcsncat, _wcsncat_l, , _mbsncat_mbsncat_l
strncmp, , wcsncmp_mbsncmp_mbsncmp_l
strcoll
-Funktionen
strncpy_s, , _strncpy_s_lwcsncpy_s, _wcsncpy_s_l, , _mbsncpy_s_mbsncpy_s_l
strrchr, , wcsrchr_mbsrchr_mbsrchr_l
_strset, , _strset_l_wcsset, _wcsset_l, , _mbsset_mbsset_l
strspn, , wcsspn_mbsspn_mbsspn_l