strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
Pobiera długość ciągu, przy użyciu bieżących ustawień regionalnych lub określonego ustawień regionalnych.Bezpieczniejsze wersje te funkcje są dostępne; Zobaczstrnlen, strnlen_s, strnlen_l, wcsnlen, wcsnlen_s, wcsnlen_l, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l
Ważne |
---|
_mbslen, _mbslen_l, _mbstrlen, i _mbstrlen_l nie można używać w aplikacji, które są wykonywane w środowiska wykonawczego systemu Windows.Aby uzyskać więcej informacji, zobacz funkcji CRT nie obsługują /ZW. |
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 zerem.locale
Ustawienia regionalne do użycia.
Wartość zwracana
Każda z tych funkcji zwraca liczbę znaków w str, z wyłączeniem terminal NULL.Nie zwraca wartości jest zarezerwowany do wskazania błąd, z wyjątkiem _mbstrlen i _mbstrlen_l, które zwraca ((size_t)(-1)) Jeśli ciąg zawiera nieprawidłowy znak wielobajtowych.
Uwagi
strleninterpretuje ciągu jako ciąg znaków, dzięki czemu można jej wartość zwracaną zawsze taki sam, jak liczba bajtów, nawet jeśli ciąg zawiera znaki wielobajtowe.wcslento wersja całego znaku strlen; w argumencie wcslen jest ciągiem znaków wide i liczby znaków znajduje się w sieci (dwubajtowych) znaków.wcslen i strlen zachowują się identycznie w innych przypadkach.
Uwaga dotycząca zabezpieczeń tych funkcji straty potencjalne zagrożenie spowodowanych problem przepełnienie buforu.Przepełnienie buforu problemy są często metody ataku systemu, powodując nienależną podniesienie poziomu uprawnień.Aby uzyskać więcej informacji, zobacz Unikanie przepełnień bufora.
Mapowania procedur zwykłego tekstu
Procedura TCHAR.H |
_UNICODE & _MBCS nie zdefiniowano |
_MBCS zdefiniowano |
_UNICODE zdefiniowano |
---|---|---|---|
_tcslen |
strlen |
strlen |
wcslen |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_l |
strlen |
_mbslen_l |
wcslen |
_mbsleni _mbslen_l zwrócona liczba znaków wielobajtowych w ciągu znaków wielobajtowych, ale nie Testuj znaków wielobajtowych ważności._mbstrleni _mbstrlen_l testowanie znaków wielobajtowych ważności i rozpoznaje sekwencje znaków wielobajtowych.Jeśli ciąg przekazany do _mbstrlen lub _mbstrlen_l zawiera nieprawidłowy znak wielobajtowych dla strony kodowej, funkcja zwraca wartość -1 i zestawy errno do EILSEQ.
Wartość danych wyjściowych ma wpływ ustawienie LC_CTYPE kategorii ustawienia określone w ustawieniach regionalnych; zobacz setlocale uzyskać więcej informacji.Wersje tych funkcji bez _l sufiks potrzeby bieżące ustawienia regionalne to zachowanie zależne od ustawień regionalnych; wersje z _l sufiks są identyczne z wyjątkiem tego, aby używały ustawień regionalnych parametr przekazany w zamian.Aby uzyskać więcej informacji, zobacz 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ć dodatkowe informacje o zgodności, zobacz zgodności.
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) );
// wstrlen 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) );
}
Odpowiednik w programie .NET Framework
Zobacz też
Informacje
Interpretacja wielobajtowych sekwencji znaków
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l