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.
![]() |
---|
_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
Zobacz też
Informacje
Interpretacja wielobajtowych sekwencji znaków
strncat, _strncat_l, wcsncat, wcsncat_l, _mbsncat _mbsncat_l
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l