_mbclen
, , mblen
_mblen_l
_mbclen_l
Получает длину многобайтового символа и определяет его допустимость.
Внимание
Этот API нельзя использовать в приложениях, выполняемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.
Синтаксис
size_t _mbclen(
const unsigned char *c
);
size_t _mbclen_l(
unsigned char const* c,
_locale_t locale
);
int mblen(
const char *mbstr,
size_t count
);
int _mblen_l(
const char *mbstr,
size_t count,
_locale_t locale
);
Параметры
c
Многобайтовый символ.
mbstr
Адрес последовательности байтов (многобайтовый символ).
count
Число проверяемых байтов.
locale
Используемый языковой стандарт.
Возвращаемое значение
_mbclen
и _mbclen_l
возвращается 1 или 2 в соответствии с длиной многобайтового символа c
. Функции всегда возвращают 1 для UTF-8, будь c
то многобайтовые или нет. Для этого не возвращается _mbclen
ошибка.
Если mbstr
значение не NULL
задано, mblen
и _mblen_l
возвращает длину в байтах многобайтового символа. _mblen_l
Функции mblen
работают правильно в UTF-8 и могут возвращать значение от 1 до 3. Если mbstr
значение равно NULL
(или указывает на символ null в широком символе) mblen
и _mblen_l
возвращается значение 0. Объект, mbstr
указывающий на то, должен сформировать допустимый многобайтовый символ в первых count
символах или _mblen_l
mblen
возвращать -1.
Замечания
Функция _mbclen
возвращает длину многобайтового символа c
в байтах. Если c
не указывает на байты байта многобайтового символа (как определено неявным вызовом _ismbblead
, результат _mbclen
непредсказуем.
mblen
возвращает длину в байтах mbstr
, если это допустимый многобайтовый символ. Он также определяет допустимость многобайтовых символов, связанных с кодовой страницей. Функция mblen
проверяет count
или меньшее число байтов, содержащихся в mbstr
, но не более MB_CUR_MAX
байтов.
Выходное значение зависит от LC_CTYPE
параметра категории языкового стандарта. Версии этих функций без _l
суффикса используют текущий языковой стандарт для этого поведения, зависяющего от языкового стандарта. Суффиксированные _l
версии ведут себя одинаково, но вместо этого используются переданные параметры языкового стандарта. Дополнительные сведения см. в разделе setlocale
и языковом стандарте.
_mbclen
, _mblen_l
и _mbclen_l
являются определенными корпорацией Майкрософт, а не частью стандартной библиотеки C. Мы не рекомендуем использовать их, где требуется переносимый код. Для совместимости уровня "Стандартный" используйте mblen
или mbrlen
вместо этого.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставления подпрограмм универсального текста
Подпрограмма Tchar.h | _UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tclen |
Сопоставляется макросу или встроенной функции | _mbclen |
Сопоставляется макросу или встроенной функции |
Требования
Маршрут | Обязательный заголовок |
---|---|
_mbclen |
<mbstring.h> |
mblen |
<stdlib.h> |
_mblen_l |
<stdlib.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_mblen.c
/* illustrates the behavior of the mblen function
*/
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
int i;
char *pmbc = (char *)malloc( sizeof( char ) );
wchar_t wc = L'a';
printf( "Convert wide character to multibyte character:\n" );
wctomb_s( &i, pmbc, sizeof(char), wc );
printf( " Characters converted: %u\n", i );
printf( " Multibyte character: %x\n\n", *pmbc );
i = mblen( pmbc, MB_CUR_MAX );
printf( "Length in bytes of multibyte character %x: %u\n", *pmbc, i );
pmbc = NULL;
i = mblen( pmbc, MB_CUR_MAX );
printf( "Length in bytes of NULL multibyte character %x: %u\n", pmbc, i );
}
Convert wide character to multibyte character:
Characters converted: 1
Multibyte character: 61
Length in bytes of multibyte character 61: 1
Length in bytes of NULL multibyte character 0: 0
См. также
Классификация символов
Локаль
Интерпретация последовательностей многобайтовых символов
_mbccpy
, _mbccpy_l
mbrlen
strlen
, , wcslen
_mbslen_l
_mbslen
_mbstrlen
,_mbstrlen_l