strnlen, strnlen_s, wcsnlen, wcsnlen_s, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l

Ruft die Länge einer Zeichenfolge durch Verwendung des aktuellen oder einen übergebenen Gebietsschemas ab. Diese Funktionen sind sicherere Versionen von strlen, , wcslen, _mbslen_l_mbslen, . _mbstrlen_l_mbstrlen

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(
   const char *str,
   size_t numberOfElements
);
size_t wcsnlen(
   const wchar_t *str,
   size_t numberOfElements
);
size_t wcsnlen_s(
   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 INT_MAXals ist numberOfElementsNULL, _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. 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
_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

Zeichenfolgenmanipulation
Gebietsschema
Interpretation von Multibyte-Zeichensequenzen
setlocale, _wsetlocale
strncat, _strncat_l, wcsncat, _wcsncat_l, _mbsncat, _mbsncat_l
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
strcoll-Funktionen
strncpy_s, _strncpy_s_l, wcsncpy_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