mbrlen
Укажите число байтов в строке, с возможностью перезапуска в середине многобайтового символов при необходимости, то при использовании текущий языковой стандарт.
size_t mbrlen(
const char *str,
size_t maxSize,
mbstate_t mbstate
);
Параметры
str
Null-завершенная строка.maxSize
Максимальный размер строки, исключая конечное нуль-символа.mbstate
состояние переноса преобразования.
Возвращаемое значение
Если строка меньше maxSize символы длины, в каждой из этих функций возвращают количество символов в str, за исключением терминалов NULL.Если строка больше maxSize символы длины, после чего maxSize возвращает.
0
Если следующий число или меньше байтов, завершаются многобайтовый, который представляет символ NULL расширенный символ.> 0
Если следующий число или меньше байтов, завершаются допустимый символ многобайтовый, возвращенное значение число байтов, которые завершаются многобайтовый символ.-1
Если количество участвуют в следующих байт, обработанных неполное multibyte и все байты числа.-2
Если ошибка кодирования, то в этом случае следующий число или меньшее число байтов не участвуют в полный и допустимы многобайтовый символ значение errno значения будет EILSEQ и состоянием преобразования неоднозначным.
Заметки
mbrlen функция определяет число байтов, образовывая последовательность символов многобайтового strс возможностью перезапуска в середине знака multi-байта если требуется, по крайней мере, представляя maxSize байты.mbstate_t аргумент mbstate используется для отслеживания состояния миграции.Если он имеет значение null, структура mbrlen использует внутреннюю статическим mbstate_t объект.Он эквивалентен следующему:
mbrtowc(NULL, str, maxSize, mbstate)
За исключением случаев, когда случай mbstate существует NULL" mbrlen полагает на собственное статическом, internal mbstate_t объект для отслеживания состояния миграции.
mbrlen функция отличается от _mbclen, mblen, _mblen_l по restartability.Состояние преобразования сохраняется в пределах mbstate для последующих вызовов этой же или другой прерываемый функциям.Смешивание использование результаты не определены прерываемых и nonrestartable функций.Например, приложение использовал бы wcsrlen вместо wcslenесли последующий вызов wcsrtombs где используется вместо wcstombs.
Сопоставления подпрограммы Родов-Текста
Подпрограмма TCHAR.H |
_MBCS не заданные _UNICODE & |
Указанный символ _MBCS |
Указанный _UNICODE |
---|---|---|---|
n/a |
n/a |
mbrlen |
n/a |
Требования
Процедура |
Обязательный заголовок |
---|---|
mbrlen |
<wchar.h> |
Дополнительные сведения о совместимости см. Совместимость во введении.
Пример
// crt_mbrlen.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>
size_t Example(const char * pStr)
{
size_t charLen = 0;
size_t charCount = 0;
mbstate_t mbState;
memset(&mbState, 0, sizeof(mbState));
while ((charLen = mbrlen(pStr, MB_CUR_MAX, &mbState)) != 0 &&
charLen != (size_t)-1 && charLen != (size_t)-2)
{
pStr += charLen;
charCount++;
}
return (charCount);
}
int main( void )
{
size_t charCount = 0;
const char *pSample = "Every good boy does fine.";
charCount = Example(pSample);
printf("%s\nLength: %d\n", pSample, charCount);
}