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 taki, który został przekazany w.Są to bezpieczniejsze wersje 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óre są wykonywane w Środowisko wykonawcze systemu Windows.Aby uzyskać więcej informacji, zobacz funkcji CRT nie obsługują /ZW.

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

Parametry

  • str
    Ciąg zerem.

  • numberOfElements
    Rozmiar buforu dla ciągu.

  • locale
    Ustawienia regionalne do użycia.

Wartość zwracana

Te funkcje zwracają liczbę znaków w ciągu, z wyłączeniem kończącego znaku null.Jeśli nie ma żadnych wartości null terminatora w pierwszym numberOfElements bajtów ciągu (lub znaków dla wcsnlen), następnie numberOfElements zwracany jest błąd, jeśli ciągi zerem mieć długości, które są ściśle mniej niż numberOfElements.

_mbstrnleni _mbstrnlen_l zwrócona wartość -1, jeśli ciąg zawiera nieprawidłowy znak wielobajtowych.

Uwagi

[!UWAGA]

strnlennie zastępuje dla strlen; strnlen jest przeznaczona do użycia tylko w celu obliczenia rozmiaru danych przychodzących niezaufanej w buforze znanej wielkości — na przykład pakietów sieciowych.strnlenoblicza długość, ale nie Przeprowadź poza końcem buforu, jeśli jest on niezakończony.W innych sytuacjach należy użyć strlen.(Dotyczy wcsnlen, _mbsnlen, i _mbstrnlen.)

Każda z tych funkcji zwraca liczbę znaków w str, bez kończącego znaku null.Jednak strnlen i strnlen_s interpretowania ciągu jako ciąg znaków i dlatego zwracana wartość jest zawsze taki sam, jak liczba bajtów, nawet jeśli ciąg zawiera znaki wielobajtowe.wcsnleni wcsnlen_s są wersjami całego znaku strnlen i strnlen_s . argumenty dla wcsnlen i wcsnlen_s całego ciągi i liczby znaków są w jednostkach całego znaku.W przeciwnym razie wcsnlen i strnlen zachowują się tak samo, jak strnlen_s i wcsnlen_s.

strnlen, wcsnlen, i _mbsnlen nie sprawdza poprawność ich parametrów.Jeśli str jest NULL, naruszenia zasad dostępu.

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

_mbstrnlenweryfikuje również jej parametrów.Jeśli str jest NULL, lub, jeśli numberOfElements jest większy niż INT_MAX, _mbstrnlen generuje wyjątek nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli jest dozwolone wykonywanie, aby kontynuować, _mbstrnlen ustawia errno do EINVAL i zwraca wartość -1.

Mapowania procedur zwykłego tekstu

Procedura TCHAR.H

_UNICODE & _MBCS nie zdefiniowano

_MBCS zdefiniowano

_UNICODE zdefiniowano

_tcsnlen

strnlen

strnlen

wcsnlen

_tcscnlen

strnlen

_mbsnlen

wcsnlen

_tcscnlen_l

strnlen

_mbsnlen_l

wcsnlen

_mbsnleni _mbstrnlen zwrócona liczba znaków wielobajtowych w ciągu znaków wielobajtowych._mbsnlenrozpoznaje sekwencje znaków wielobajtowych zgodnie z strony kodowej wielobajtowych, która jest aktualnie w użyciu lub zgodnie z ustawień regionalnych, który został przekazany; nie sprawdza poprawność znaków wielobajtowych._mbstrnlensprawdzenie 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ść danych wyjściowych ma wpływ ustawienie LC_CTYPE kategorii ustawienia określone w ustawieniach regionalnych; zobacz setlocale, _wsetlocale uzyskać więcej informacji.Wersje te funkcje są identyczne, z tą różnicą, że te, które nie mają _l sufiks bieżące ustawienia regionalne to zachowanie zależne od ustawień regionalnych i używać wersji, które mają _l sufiks Użyj zamiast niego parametr ustawienia regionalne, który został przekazany.Aby uzyskać więcej informacji, zobacz Regionalne.

Wymagania

Procedura

Wymagany nagłówek

strnlen, strnlen_s

< string.h >

wcsnlen, wcsnlen_s

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

Regionalne

Interpretacja wielobajtowych sekwencji znaków

setlocale, _wsetlocale

strncat, _strncat_l, wcsncat, wcsncat_l, _mbsncat _mbsncat_l

strncmp, wcsncmp, _mbsncmp, _mbsncmp_l

strcoll — Funkcje

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