Udostępnij za pośrednictwem


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

Pobiera długość ciągu przy użyciu bieżących ustawień regionalnych lub taką, która została przekazana w.Są bardziej bezpieczne wersje funkcji strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l.

Ważna uwagaWażne

_mbsnlen, _mbsnlen_l, _mbstrnlen, i _mbstrnlen_l nie można używać w aplikacji, których wykonywanie w Środowisko wykonawcze systemu Windows.Aby uzyskać więcej informacji, zobacz CRT funkcje nie obsługiwane przez /ZW.

size_t strnlen(
   const char *str,
   size_t numberOfElements 
);
size_t strnlen_s(
   const char *str,
   size_t numberOfElements 
);
size_t strnlen_l(
   const char *str,
   size_t numberOfElements,
   _locale_t locale
);
size_t wcsnlen(
   const wchar_t *str,
   size_t numberOfElements
);
size_t wcsnlen_s(
   const wchar_t *str,
   size_t numberOfElements
);
size_t wcsnlen_l(
   const wchar_t *str,
   size_t numberOfElements,
   _locale_t locale
);
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
);

Parametry

  • str
    Ciąg zakończony znakiem null.

  • numberOfElements
    Rozmiar buforu ciągów.

  • locale
    Ustawienia regionalne używane.

Wartość zwracana

Funkcje te zwracają liczbę znaków w ciągu, z pominięciem końcowego znaku null.Jeśli nie ma żadnych wartości null terminator w ciągu pierwszych numberOfElements bajtów w ciągu (lub szerokości znaków dla wcsnlen), następnie numberOfElements są zwracane do wskazują na stan błędu; zakończony zerem ciągów mają długości, które są ściśle mniej niż numberOfElements.

_mbstrnleni _mbstrnlen_l zwraca –1, jeśli ciąg zawiera nieprawidłowy znak wielobajtowych.

Uwagi

[!UWAGA]

strnlennie jest zamiennikiem strlen; strnlenjest przeznaczone do stosowania tylko do obliczania rozmiaru przychodzących niezaufanych danych w buforze znanej wielkości — na przykład pakiet sieciowy.strnlenoblicza długość, ale nie przejść obok końca bufora, jeśli ciąg jest niezakończony.W innych sytuacjach, użyj strlen.(The same applies to wcsnlen, _mbsnlen, and _mbstrnlen.)

Każda z tych funkcji zwraca liczbę znaków w str, z wyłączeniem końcowego znaku null.Jednakże strnlen i strnlen_l interpretowania ciągu jako ciąg znaków jednobajtowych i w związku z tym, wartość zwracana jest zawsze równa liczbie bajtów, nawet jeśli ciąg zawiera znaki wielobajtowe.wcsnleni wcsnlen_l są wersje szerokich znaków strnlen i strnlen_l ; argumenty wcsnlen i wcsnlen_l są ciągi szerokich znaków i liczba znaków w jednostkach szerokich znaków.Otherwise, wcsnlen, wcsnlen_l, strnlen and strnlen_l behave identically.

strnlen, wcsnlen, i _mbsnlen nie są zgodne z nimi parametrów.Jeśli str jest NULL, występuje błąd naruszenia zasad dostępu.

strnlen_si wcsnlen_s sprawdzania poprawności ich parametrów.Jeśli str jest NULL, funkcje zwracają wartość 0.

_mbstrnlensprawdza też, jego parametry.Jeśli str jest NULL, lub jeśli numberOfElements jest większa niż INT_MAX, _mbstrnlen generuje wyjątek nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, _mbstrnlen ustawia errno do EINVAL i zwraca wartość -1.

Tekst rodzajowy rutynowych mapowania

TCHAR.Rozpoczęto wykonywanie procedury h

_UNICODE & _MBCS nie zdefiniowany

_MBCS, definicja

_UNICODE, definicja

_tcsnlen

strnlen

strnlen

wcsnlen

_tcscnlen

strnlen

_mbsnlen

wcsnlen

_tcscnlen_l

strnlen_l

_mbsnlen_l

wcsnlen_l

_mbsnleni _mbstrnlen zwraca liczbę znaków wielobajtowych w łańcuch znaków._mbsnlenrozpoznaje sekwencje znaków wielobajtowych zgodnie strona kodowa wielobajtowych, który jest aktualnie w użyciu lub zgodnie z ustawień regionalnych, które należy przekazać w; nie sprawdza poprawności znaków wielobajtowych._mbstrnlentesty poprawności znaków wielobajtowych i rozpoznaje sekwencje znaków wielobajtowych.Jeśli ciąg, który jest przekazywany do _mbstrnlen zawiera nieprawidłowy znak wielobajtowych, errno jest ustawiona na EILSEQ.

Wartość produkcji jest zależny od ustawienia z LC_CTYPE kategorii ustawienie regionalne tzn. zobacz setLocale, _wsetlocale Aby uzyskać więcej informacji.Wersje te funkcje są identyczne, z tym, że te nie mają _l sufiks Użyj bieżących ustawień regionalnych dla tego zachowania zależne od ustawień lokalnych i wersji, które mają _l sufiks zamiast tego użyć parametru ustawień regionalnych, który jest przekazywana.Aby uzyskać więcej informacji, zobacz Ustawienia regionalne.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

strnlen, strnlen_s, strnlen_l

<string.h>

wcsnlen, wcsnlen_s, wcsnlen_l

<string.h> lub <wchar.h>

_mbsnlen, _mbsnlen_l

<mbstring.h>

_mbstrnlen, _mbstrnlen_l

<stdlib.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz Zgodność.

Przykład

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

Odpowiednik w programie .NET Framework

System::String::length

Zobacz też

Informacje

Manipulowanie ciągami (CRT)

Ustawienia regionalne

Interpretacja sekwencje znaków wielobajtowych

setLocale, _wsetlocale

strncat, _strncat_l, wcsncat, wcsncat_l, _mbsncat _mbsncat_l

strncmp, wcsncmp, _mbsncmp, _mbsncmp_l

Funkcje strcoll

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