strlen
, , wcslen
, _mbslen
, _mbslen_l
, , _mbstrlen
_mbstrlen_l
Pobiera długość ciągu przy użyciu bieżących ustawień regionalnych lub określonych ustawień regionalnych. Dostępne są bezpieczniejsze wersje tych funkcji; zobacz strnlen
, , strnlen_s
, wcsnlen_s
wcsnlen
_mbsnlen
, , _mbsnlen_l
_mbstrnlen
_mbstrnlen_l
Ważne
_mbslen
, _mbslen_l
, _mbstrlen
i _mbstrlen_l
nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows. Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane w aplikacjach platforma uniwersalna systemu Windows.
Składnia
size_t strlen(
const char *str
);
size_t wcslen(
const wchar_t *str
);
size_t _mbslen(
const unsigned char *str
);
size_t _mbslen_l(
const unsigned char *str,
_locale_t locale
);
size_t _mbstrlen(
const char *str
);
size_t _mbstrlen_l(
const char *str,
_locale_t locale
);
Parametry
str
Ciąg zakończony wartością null.
locale
Ustawienia regionalne do użycia.
Wartość zwracana
Każda z tych funkcji zwraca liczbę znaków w str
obiekcie z wyłączeniem wartości null terminalu. Żadna wartość zwracana nie jest zarezerwowana, aby wskazać błąd, z wyjątkiem _mbstrlen
i _mbstrlen_l
, które zwracają ((size_t)(-1))
wartość , jeśli ciąg zawiera nieprawidłowy znak wielobajtowy.
Uwagi
strlen
interpretuje ciąg jako ciąg znaków jednobajtowych, więc jego wartość zwracana jest zawsze równa liczbie bajtów, nawet jeśli ciąg zawiera znaki wielobajtowe. wcslen
jest wersją szerokoznakową strlen
; argument wcslen
jest ciągiem o szerokim znaku, a liczba znaków jest w postaci znaków szerokich (dwubajtowych). wcslen
i strlen
zachowywać się identycznie inaczej.
Uwaga zabezpieczeń Te funkcje powodują potencjalne zagrożenie spowodowane przez problem z przepełnieniem buforu. Problemy z przepełnieniem buforu są częstą metodą ataku systemowego, co powoduje nieuzasadnione podniesienie uprawnień. Aby uzyskać więcej informacji, zobacz Unikanie przekroków buforu.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Mapowania procedur tekstu ogólnego
TCHAR.H rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_tcslen |
strlen |
strlen |
wcslen |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_l |
strlen |
_mbslen_l |
wcslen |
_mbslen
i _mbslen_l
zwracają liczbę znaków wielobajtowych w ciągu wielobajtowym, ale nie testują ważności znaków wielobajtowych. _mbstrlen
i _mbstrlen_l
przetestuj pod kątem ważności znaków wielobajtowych i rozpoznaj sekwencje znaków wielobajtowych. Jeśli ciąg przekazany do _mbstrlen
lub zawiera nieprawidłowy znak wielobajtowy dla strony kodowej, funkcja zwraca wartość -1 i ustawia wartość EILSEQ
errno
._mbstrlen_l
Na wartość wyjściową ma wpływ ustawienie LC_CTYPE
ustawienia kategorii ustawień regionalnych. Aby uzyskać więcej informacji, zobacz setlocale
. Wersje tych funkcji bez sufiksu _l
używają bieżących ustawień regionalnych dla tego zachowania zależnego od ustawień regionalnych. Wersje z _l
sufiksem są identyczne, z tą różnicą, że używają parametru ustawień regionalnych przekazanych zamiast. Aby uzyskać więcej informacji, zobacz Ustawienia regionalne.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
strlen |
<string.h> |
wcslen |
<string.h> lub <wchar.h> |
_mbslen , _mbslen_l |
<mbstring.h> |
_mbstrlen , _mbstrlen_l |
<stdlib.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// crt_strlen.c
// Determine the length of a string. For the multi-byte character
// example to work correctly, the Japanese language support for
// non-Unicode programs must be enabled by the operating system.
#include <string.h>
#include <locale.h>
int main()
{
char* str1 = "Count.";
wchar_t* wstr1 = L"Count.";
char * mbstr1;
char * locale_string;
// strlen gives the length of single-byte character string
printf("Length of '%s' : %d\n", str1, strlen(str1) );
// wcslen gives the length of a wide character string
wprintf(L"Length of '%s' : %d\n", wstr1, wcslen(wstr1) );
// A multibyte string: [A] [B] [C] [katakana A] [D] [\0]
// in Code Page 932. For this example to work correctly,
// the Japanese language support must be enabled by the
// operating system.
mbstr1 = "ABC" "\x83\x40" "D";
locale_string = setlocale(LC_CTYPE, "Japanese_Japan");
if (locale_string == NULL)
{
printf("Japanese locale not enabled. Exiting.\n");
exit(1);
}
else
{
printf("Locale set to %s\n", locale_string);
}
// _mbslen will recognize the Japanese multibyte character if the
// current locale used by the operating system is Japanese
printf("Length of '%s' : %d\n", mbstr1, _mbslen(mbstr1) );
// _mbstrlen will recognize the Japanese multibyte character
// since the CRT locale is set to Japanese even if the OS locale
// isnot.
printf("Length of '%s' : %d\n", mbstr1, _mbstrlen(mbstr1) );
printf("Bytes in '%s' : %d\n", mbstr1, strlen(mbstr1) );
}
Length of 'Count.' : 6
Length of 'Count.' : 6
Length of 'ABCァD' : 5
Length of 'ABCァD' : 5
Bytes in 'ABCァD' : 6
Zobacz też
Manipulowanie ciągami
Interpretacja sekwencji znaków wielobajtowych
ustawienia regionalne
setlocale
, _wsetlocale
strcat
, , wcscat
_mbscat
strcmp
, , wcscmp
_mbscmp
strcoll
, funkcje
strcpy
, , wcscpy
_mbscpy
strrchr
, , wcsrchr
, , _mbsrchr
_mbsrchr_l
_strset
, , _strset_l
, _wcsset
, _wcsset_l
, , _mbsset
_mbsset_l
strspn
, , wcsspn
, , _mbsspn
_mbsspn_l