mbsrtowcs_s
Преобразуют многобайтовую строку символов в текущем языковом стандарте в представление с расширенными символами. Версия mbsrtowcs
с улучшениями безопасности, как описано в функциях безопасности в CRT.
Синтаксис
errno_t mbsrtowcs_s(
size_t * pReturnValue,
wchar_t * wcstr,
size_t sizeInWords,
const char ** mbstr,
size_t count,
mbstate_t * mbstate
);
template <size_t size>
errno_t mbsrtowcs_s(
size_t * pReturnValue,
wchar_t (&wcstr)[size],
const char ** mbstr,
size_t count,
mbstate_t * mbstate
); // C++ only
Параметры
pReturnValue
Количество символов для преобразования.
wcstr
Адрес буфера для результирующей преобразованной строки расширенных символов.
sizeInWords
Размер wcstr
в словах (расширенных символах).
mbstr
Косвенный указатель на расположение преобразуемой строки многобайтовых символов.
count
Максимальное количество расширенных символов для хранения в буфере wcstr
, не включая завершающее значение NULL или _TRUNCATE
.
mbstate
Указатель на объект состояния преобразования mbstate_t
. Если это значение является пустым указателем, используется статичный внутренний объект состояния преобразования. Так как внутренний mbstate_t
объект не является потокобезопасной, рекомендуется всегда передавать собственный mbstate
параметр.
Возвращаемое значение
Нуль, если преобразование выполнено успешно; код ошибки при неудаче.
Условие ошибки | Возвращаемое значение и errno |
---|---|
wcstr является указателем null и sizeInWords > 0 |
EINVAL |
mbstr является пустым указателем |
EINVAL |
Строка косвенно, на которую указывает mbstr , содержит многобайтовую последовательность, которая не является допустимой для текущего языкового стандарта. |
EILSEQ |
Буфер назначения слишком мал, чтобы вместить преобразованную строку (и параметр count не равен _TRUNCATE ; см. примечания ниже). |
ERANGE |
Если возникает одно из этих условий, вызывается недопустимое исключение параметров, как описано в разделе проверки параметров. Если выполнение может быть продолжено, то функция возвращает код ошибки и устанавливает errno
, как показано в таблице.
Замечания
Функция mbsrtowcs_s
преобразует строку многобайтовых символов, на которую косвенно указывает параметр mbstr
, в расширенные символы, сохраняемые в буфере, на который указывает параметр wcstr
. При этом используется состояние преобразования, содержащееся в mbstate
. Преобразование будет продолжаться для каждого символа до тех пор, пока не будет выполнено одно из указанных ниже условий.
Встретился многобайтовый символ null.
Встретился недопустимый многобайтовый символ.
Число расширенных символов, сохраненных в буфере
wcstr
, равноcount
.
Целевая строка wcstr
всегда завершается значением NULL, wcstr
даже если ошибка не имеет значения NULL.
Если count
это специальное значение _TRUNCATE
, mbsrtowcs_s
преобразуется столько строки, сколько вместится в целевой буфер, при этом остается место для конца null.
Если mbsrtowcs_s
исходная строка успешно преобразуется, она помещает размер в широкие символы преобразованной строки и конца *pReturnValue
null, если указан pReturnValue
не пустой указатель. Размер вычисляется, даже если wcstr
аргумент является пустым указателем, что позволяет определить требуемый размер буфера. Если wcstr
указатель имеет значение NULL, count
игнорируется.
Если wcstr
указатель не является пустым, объект указателя, на который указывает mbstr
указатель, назначается указателем NULL, если преобразование остановлено, так как достигнут завершающий символ NULL. В противном случае он назначает адрес только после последнего многобайтового символа, преобразованного, если таковой есть. Он позволяет последующему вызову функции перезапустить преобразование, в котором этот вызов остановлен.
Если значение mbstate
является пустым указателем, используется статичный внутренний объект состояния преобразования mbstate_t
. Так как этот внутренний статический объект не является потокобезопасной, рекомендуется передать собственное mbstate
значение.
Если mbsrtowcs_s
встречается многобайтовый символ, недопустимый в текущем языковом стандарте, он помещает -1 в*pReturnValue
, задает целевой буфер wcstr
пустой строке, задает errno
значение EILSEQ
и возвращает .EILSEQ
Если последовательности, на которые указывают параметры mbstr
и wcstr
, перекрываются, то поведение mbsrtowcs_s
не определено. mbsrtowcs_s
влияет на LC_TYPE
категорию текущего языкового стандарта.
Внимание
Убедитесь, что строки wcstr
и mbstr
не перекрываются, и что параметр count
правильно отражает количество преобразуемых многобайтовых символов.
Функция mbsrtowcs_s
отличается от _mbstowcs_s_l
mbstowcs_s
ее перезапуска. Состояние преобразования хранится в переменной mbstate
для последующих вызовов тех же или других перезапускаемых функций. При смешанном использовании перезапускаемых и неперезапускаемых функций результаты становятся неопределенными. Например, приложение должно использовать mbsrlen
вместо mbslen
него, если последующий вызов mbsrtowcs_s
используется вместо mbstowcs_s
.
В C++использование этой функции упрощается перегрузками шаблонов; Перегрузки могут автоматически выводить длину буфера (устраняя требование указать аргумент размера), и они могут автоматически заменить старые, небезопасные функции с помощью более новых, безопасных коллег. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Исключения
Функция mbsrtowcs_s
является многопоточной безопасной, если функция в текущих вызовах setlocale
потока не выполняется, и mbstate
аргумент не является пустым указателем.
Требования
Маршрут | Обязательный заголовок |
---|---|
mbsrtowcs_s |
<wchar.h> |
См. также
Преобразование данных
Локаль
Интерпретация последовательностей многобайтовых символов
mbrtowc
mbtowc
, _mbtowc_l
mbstowcs_s
, _mbstowcs_s_l
mbsinit