Поделиться через


mbstowcs_s, _mbstowcs_s_l

Преобразование последовательности многобайтовых символов в соответствующую последовательность расширенных символов. Версии mbstowcs, _mbstowcs_l с усовершенствованной безопасностью, как описано в разделе Функции безопасности в CRT.

errno_t mbstowcs_s(
   size_t *pReturnValue,
   wchar_t *wcstr,
   size_t sizeInWords,
   const char *mbstr,
   size_t count 
);
errno_t _mbstowcs_s_l(
   size_t *pReturnValue,
   wchar_t *wcstr,
   size_t sizeInWords,
   const char *mbstr,
   size_t count,
   _locale_t locale
);
template <size_t size>
errno_t mbstowcs_s(
   size_t *pReturnValue,
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count 
); // C++ only
template <size_t size>
errno_t _mbstowcs_s_l(
   size_t *pReturnValue,
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count,
   _locale_t locale
); // C++ only

Параметры

  • [исходящий] pReturnValue
    Количество символов для преобразования.

  • [исходящий] wcstr
    Адрес буфера для результирующей преобразованной строки расширенных символов.

  • [входящий] sizeInWords
    Размер буфера wcstr в словах.

  • [входящий]mbstr
    Адрес последовательности многобайтовых символов, завершенной нулевым символом.

  • [входящий] count
    Максимальное количество расширенных символов, которые необходимо сохранить в буфере wcstr, не включая завершающий нулевой символ, или _TRUNCATE.

  • [входящий] locale
    Используемый языковой стандарт.

Возвращаемое значение

Нуль, если успешно; код ошибки при неудаче.

Условие ошибки.

Возвращает значение и errno

wcstr содержит значение NULL и sizeInWords > 0

EINVAL

Параметр mbstr содержит значение NULL

EINVAL

Буфер назначения слишком мал, чтобы вместить преобразованную строку (иначе count будет _TRUNCATE; см. примечания ниже)

ERANGE

wcstr не должен быть NULL и sizeInWords == 0

EINVAL

Если срабатывает какое-либо из этих условий, то возникает исключение о недопустимом параметре, как описано в Проверка параметров. Если выполнение может быть продолжено, то функция возвращает код ошибки и устанавливает errno как показано в таблице.

Заметки

Функция mbstowcs_s выполнит преобразование строки многобайтовых символов, содержащихся в mbstr, в расширенные, сохраняемые в буфере, на который указывает wcstr. Преобразование будет продолжаться для каждого символа до тех пор, пока одно не будет выполнено одно из следующих условий:

  • Встретился многобайтовый нулевой символ

  • Встретился недопустимый многобайтовый символ

  • Количество расширенных символов, хранящихся в буфере wcstr, равно count.

Строка назначения всегда содержит завершающий null (даже в случае ошибки).

Если count является специальным значением _TRUNCATE, то преобразование mbstowcs_s будет выполняться до тех пор, пока буфер назначения не будет заполнен с учетом завершающего признака null.

Если mbstowcs_s успешно выполнит преобразование исходной строки, то значение, содержащее размер преобразованной строки в расширенных символах с учетом завершающего нулевого символа конца строки, будет помещено в *pReturnValue (предоставленное значение pReturnValue не равно NULL). Это происходит даже если аргумент wcstr равен NULL, таким образом, предоставляя возможность задать необходимый размер буфера. Обратите внимание, что если wcstr — NULL, то count игнорируется, а sizeInWords должен быть равен 0.

Если mbstowcs_s встречает недопустимый многобайтовый символ, он помещает 0 в *pReturnValue, устанавливает буфер назначения в пустую строку, устанавливает errno в EILSEQ и возвращает EILSEQ.

Если последовательности, на которые указывают mbstr и wcstr, перекрываются, то поведение mbstowcs_s не определено.

Примечание о безопасностиПримечание по безопасности

Убедитесь, что wcstr и mbstr не перекрываются, и что count правильно отражает количество многобайтовых символов для преобразования.

mbstowcs_s использует текущий языковой стандарт для любых расширений, зависящих от языкового стандарта; _mbstowcs_s_l идентична за исключением того, что она использует переданный языковой стандарт. Для получения дополнительной информации см. Языковой стандарт.

В C++ использование данных функций упрощено наличием шаблонных перегрузок; перегруженные методы могут автоматически определять длину буфера (что исключает необходимость указания аргумента с размером буфера), а также они могут автоматически заменять более старые, незащищенные функции их новыми безопасными аналогами. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.

Требования

Подпрограмма

Обязательный заголовок

mbstowcs_s

<stdlib.h>

_mbstowcs_s_l

<stdlib.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Преобразование данных

Языковой стандарт

MultiByteToWideChar

Интерпретация последовательностей в многобайтной кодировке

_mbclen, mblen, _mblen_l

mbtowc, _mbtowc_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l