strlen
, , wcslen
_mbslen_l
_mbslen
_mbstrlen
,_mbstrlen_l
Получает длину строки, используя текущий или указанный языковой стандарт. Доступны более безопасные версии этих функций; see, strnlen_s
_mbstrnlen
wcsnlen
wcsnlen_s
_mbsnlen
_mbsnlen_l
strnlen
_mbstrnlen_l
Внимание
_mbslen
, _mbslen_l
, _mbstrlen
и _mbstrlen_l
нельзя использовать в приложениях, выполняемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.
Синтаксис
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
);
Параметры
str
Строка, завершающаяся символом NULL.
locale
Используемый языковой стандарт.
Возвращаемое значение
Каждая из этих функций возвращает количество символов, str
за исключением значения NULL терминала. Зарезервированное возвращаемое значение для обозначения ошибки отсутствует, за исключением _mbstrlen
и _mbstrlen_l
, которые возвращают ((size_t)(-1))
, если строка содержит недопустимый многобайтовый символ.
Замечания
strlen
интерпретирует строку как строку однобайтовых символов, поэтому возвращаемое значение всегда равно числу байт, даже если строка содержит многобайтовые символы. wcslen
— это версия strlen
с расширенными символами; аргумент wcslen
— строка расширенных символов, а число символов выражается в расширенных (двухбайтовых) символах. Поведениеwcslen
и strlen
идентично в противном случае.
Примечание о безопасности. Эти функции предполагают потенциальную угрозу, связанную с проблемой переполнения буфера. Проблемы переполнения буфера — это распространенный метод атак на системы, который приводит к несанкционированному повышению уровня прав. Дополнительные сведения см. в разделе "Избегание переполнения буфера".
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставления подпрограмм универсального текста
TCHAR.H рутина |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tcslen |
strlen |
strlen |
wcslen |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_l |
strlen |
_mbslen_l |
wcslen |
_mbslen
и _mbslen_l
возвращает количество многобайтовых символов в строке многобайтового символа, но они не проверяются на допустимость многобайтовых символов. _mbstrlen
и _mbstrlen_l
проверяют допустимость многобайтовых символов и распознают их последовательности. Если строка, переданная в _mbstrlen
или _mbstrlen_l
, содержит недопустимый многобайтовый символ для кодовой страницы, функция возвращает значение -1 и задает для errno
значение EILSEQ
.
Выходное значение зависит от параметра LC_CTYPE
категории языкового стандарта. Дополнительные сведения см. в разделе setlocale
. Версии этих функций без суффикса _l
используют текущий языковой стандарт для данного поведения, зависимого от языкового стандарта. Версии с суффиксом _l
идентичны, однако они используют переданный параметр языкового стандарта. Дополнительные сведения см. в разделе Locale.
Требования
Маршрут | Обязательный заголовок |
---|---|
strlen |
<string.h> |
wcslen |
<string.h> или <wchar.h> |
_mbslen , _mbslen_l |
<mbstring.h> |
_mbstrlen , _mbstrlen_l |
<stdlib.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// 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
См. также
Обработка строк
Интерпретация последовательностей многобайтовых символов
Локаль
setlocale
, _wsetlocale
strcat
, , wcscat
_mbscat
strcmp
, , wcscmp
_mbscmp
Функции strcoll
strcpy
, , wcscpy
_mbscpy
strrchr
, , wcsrchr
_mbsrchr
_mbsrchr_l
_strset
, , _strset_l
_wcsset_l
_wcsset
_mbsset
,_mbsset_l
strspn
, , wcsspn
_mbsspn
_mbsspn_l