MBSNRTOWCS(3)

НАЗВАНИЕ
mbsnrtowcs - преобразует многобайтовую строку в строку широких символов

СИНТАКСИС
#include <wchar.h>

size_t mbsnrtowcs(wchar_t *dest, const char **src,
                   size_t nms, size_t len, mbstate_t *ps);

ОПИСАНИЕ
Функция mbsnrtowcs очень похожа на функцию mbsrtowcs, но количество байтов, предназначенных для преобразования и начинающихся с *src, ограничено до nms.

Если dest не является NULL-указателем, то функция mbsnrtowcs преобразует максимум nms байтов из многобайтовой строки *src в строку широких символов, начиная с dest. Максимум len широких символов запишется в dest. Статус смещения *ps обновляется. Преобразование эффективно выполняется многократным вызовом mbrtowc(dest,*src,n,ps) , где n - некоторое положительное число (пока данный вызов успешно работает) и последующим увеличением dest на единицу и *src на количество "отработанных" байтов. Преобразование может остановиться по трем следующим причинам:

1. Была встречена неправильная многобайтовая последовательность. В этом случае *src оставляется для указания на неправильную многобайтовую последовательность, возвращается (size_t)(-1), а значение errno меняется на EILSEQ.

2. Был достигнут предел nms или в dest было сохранено len широких ненулевых символов. В этом случае *src оставляют для указания на следующую многобайтовую последовательность преобразований; при этом возвращается количество широких символов, записанных в dest.

3. Многобайтовая строка была полностью преобразована, включая заключительный '\0' (который дополнительно производит возвращение *ps в исходное состояние). В этом случае *src устанавливается равным NULL, возвращается количество широких символов, записанных в dest, кроме заключительного символа L'\0'.

Если dest равно NULL, то len игнорируется и преобразование продолжается по схеме, описанной выше, хотя преобразованные широкие символы не записываются в память, и при записи не существует ограничений длины результирующего преобразования.

В обоих вышеперечисленных случаях, если ps является NULL-указателем, вместо него используется статическое анонимное состояние, известное только функции mbsnrtowcs.

Программист должен убедиться, что в dest существует достаточно места хотя бы для len широких символов.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция mbsnrtowcs возвращает количество широких символов, которые составляют преобразованную часть строки широких символов без учета заключительного широкого null-символа. Если была встречена неправильная многобайтовая последовательность, то возвращается (size_t)(-1), а значение переменной errno меняется на EILSEQ.

СООТВЕТСТВИЕ СТАНДАРТАМ
Эта функция является расширением GNU.

СМ. ТАКЖЕ
mbsrtowcs(3), iconv(3)

ЗАМЕЧАНИЯ
Поведение mbsnrtowcs зависит от категории LC_CTYPE текущей локали.

Применение NULL как ps для нескольких подпроцессов небезопасно.