Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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