_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_lmblen возвращать -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, _mbslen_l, _mbstrlen, _mbstrlen_l