Dela via


strnlen, strnlen_s, wcsnlen, wcsnlen_s, _mbsnlen, , _mbsnlen_l, , _mbstrnlen_mbstrnlen_l

Hämtar längden på en sträng med hjälp av det aktuella språket eller ett som har skickats in. Dessa funktioner är säkrare versioner av strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, . _mbstrlen_l

Viktigt!

_mbsnlen, _mbsnlen_l, _mbstrnlenoch _mbstrnlen_l kan inte användas i program som körs i Windows Runtime. Mer information finns i CRT-funktioner som inte stöds i universella Windows Platform-appar.

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
);

Parameterar

str
Null-avslutad sträng.

numberOfElements
Storleken på strängbufferten.

locale
Nationella inställningar som ska användas.

Returvärde

Dessa funktioner returnerar antalet tecken i strängen, inklusive det avslutande null-tecknet. Om det inte finns någon null-avslut inom de första numberOfElements byteen i strängen (eller breda tecken för ) returneras det numberOfElements för wcsnlenatt indikera felvillkoret. Null-avslutade strängar har längder som är strikt mindre än numberOfElements.

_mbstrnlen och _mbstrnlen_l returnera -1 om strängen innehåller ett ogiltigt flerbytestecken.

Anmärkningar

Anmärkning

strnlen är inte en ersättning för strlen; strnlen är avsedd att endast användas för att beräkna storleken på inkommande ej betrodda data i en buffert av känd storlek, till exempel ett nätverkspaket. strnlen beräknar längden men går inte förbi slutet av bufferten om strängen är obestämd. I andra situationer använder du strlen. (Samma sak gäller för wcsnlen, _mbsnlenoch _mbstrnlen.)

Var och en av dessa funktioner returnerar antalet tecken i str, inklusive det avslutande null-tecknet. strnlen Men och strnlen_s tolka strängen som en teckensträng med en byte och därför är returvärdet alltid lika med antalet byte, även om strängen innehåller flerabytestecken. wcsnlen och wcsnlen_s är wide-character versioner av strnlen respektive strnlen_s ; argumenten för wcsnlen och wcsnlen_s är wide-character strängar och antalet tecken är i wide-character enheter. Annars wcsnlen , och strnlen beter sig identiskt, som gör strnlen_s och wcsnlen_s.

strnlen, wcsnlenoch _mbsnlen verifierar inte parametrarna. Om str är NULLinträffar en åtkomstöverträdelse.

strnlen_s och wcsnlen_s verifiera deras parametrar. Om str är NULLreturnerar funktionerna 0.

_mbstrnlen verifierar också dess parametrar. Om str är NULL, eller om numberOfElements är större än INT_MAX, _mbstrnlen genererar ett ogiltigt parameterfel enligt beskrivningen i Parameterverifiering. Om körningen tillåts fortsätta _mbstrnlen anger du errno till EINVAL och returnerar -1.

Som standard är den här funktionens globala tillstånd begränsat till programmet. Information om hur du ändrar det här beteendet finns i Globalt tillstånd i CRT.

Anmärkning

När du använder Windows SDK version 10.0.26100.6901 och Visual Studio 2026 eller senare tillsammans och strnlen_swcsnlen_s inte längre static inline är (intern länkning). I stället är inline de (extern länkning).
För att återgå till det tidigare beteendet, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 innan du inkluderar några CRT-huvuden. Som standard _STATIC_INLINE_UCRT_FUNCTIONS är värdet 0.
Den här ändringen ökar UCRT-överensstämmelsen med C++-standarden och förbättrar kompatibiliteten med C++-moduler.

Allmän textrutinmappning

TCHAR.H rutin _UNICODE och _MBCS inte definierad _MBCS definierad _UNICODE definierad
_tcsnlen strnlen strnlen wcsnlen
_tcscnlen strnlen _mbsnlen wcsnlen
_tcscnlen_l strnlen _mbsnlen_l wcsnlen

_mbsnlen och _mbstrnlen returnera antalet flerbytestecken i en sträng med flerabyte tecken. _mbsnlen identifierar sekvenser med flerabytestecken enligt den kodsida i flerabyte som för närvarande används eller enligt de nationella inställningar som skickas in. den testar inte för giltighet med flerabytestecken. _mbstrnlen testar för multibyte-tecken giltighet och identifierar sekvenser med flerabyte tecken. Om strängen som skickas till _mbstrnlen innehåller ett ogiltigt flerbytestecken anges errno till EILSEQ.

Utdatavärdet påverkas av inställningen för kategoriinställningen LC_CTYPE för nationella inställningar. Mer information finns i setlocale. Versionerna av dessa funktioner är identiska, förutom att de som inte har suffixet _l använder det aktuella språket för det här språkberoende beteendet och de versioner som har suffixet _l i stället använder språkparametern som skickas in. Mer information finns i Nationella inställningar.

Kravspecifikation

Rutin Obligatoriskt huvud
strnlen, strnlen_s <string.h>
wcsnlen, wcsnlen_s <string.h> eller <wchar.h>
_mbsnlen, _mbsnlen_l <mbstring.h>
_mbstrnlen, _mbstrnlen_l <stdlib.h>

Mer kompatibilitetsinformation finns i Kompatibilitet.

Example

// 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

Se även

Strängmanipulering
regionala inställningar
Tolkning av sekvenser med flerabytestecken
setlocale, _wsetlocale
strncat, _strncat_l, wcsncat, _wcsncat_l, , _mbsncat, _mbsncat_l
strncmp, wcsncmp, , _mbsncmp_mbsncmp_l
strcoll funktioner
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