wcsrtombs_s

Преобразование строка символов юникода в строковое представление многобайтового символов.Версия wcsrtombs со службами расширений безопасности, как описано в разделе Средства безопасности в CRT.

errno_t wcsrtombs_s(
   size_t *pReturnValue,
   char *mbstr,
   size_t sizeInBytes,
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
);
template <size_t size>
errno_t wcsrtombs_s(
   size_t *pReturnValue,
   char (&mbstr)[size],
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
); // C++ only

Параметры

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

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

  • [исходящий] sizeInBytes
    Размер в байтах mbstr буфер.

  • [входящий] wcstr
    Указывает на характерной чертой расширенных символов для преобразования.

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

  • [входящий] mbstate
    Указатель на mbstate_t объект состояния преобразования.

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

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

Ошибки

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

mbstr существует NULL и sizeInBytes > 0

EINVAL

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

EINVAL

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

ERANGE

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

Заметки

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

  • Расширенный символ встречается null

  • Расширенный символа, который нельзя преобразовать встретится

  • Число байтов, хранимых в mbstr equals буфера count.

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

If count специальное значение _TRUNCATEпосле этого wcsrtombs_s преобразование как многие строки как поместит в буфер назначения, пока все еще покидающ места для признака конца null.

If wcsrtombs_s успешно выполнит преобразование строки источника, он помещает размер в байтах преобразованной строки, включая символ конца строки null, в *pReturnValue (предоставляется pReturnValue нет NULL).Это происходит, даже если mbstr аргумент NULL и предоставляет возможность задать требуемый размер буфера.Обратите внимание, что, если mbstr существует NULL" count игнорирует.

If wcsrtombs_s расширенный символ встречает его нельзя преобразовать в многобайтовому символ, он помещает -1 *pReturnValueзадает буфер назначения к пустой строке, наборы errno В EILSEQи возвращает EILSEQ.

Если последовательности указали к которым следуют wcstr и mbstr перекрытие, расширения функциональности wcsrtombs_s препроцессора.wcsrtombs_s влияет на категории LC_TYPE текущего языкового стандарта.

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

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

wcsrtombs_s функция отличается от wcstombs_s, _wcstombs_s_l по restartability.Состояние преобразования сохраняется в пределах mbstate для последующих вызовов этой же или другой прерываемый функциям.Смешивание использование результаты не определены прерываемых и nonrestartable функций.Например, приложение использовал бы wcsrlen вместо wcslenесли последующий вызов wcsrtombs_s вместо использования wcstombs_s.

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

Исключения

wcsrtombs_s функция многопоточной safe, если ни одна функция в текущих вызовов потока setlocale пока эта функция выполняется и mbstate равны null.

Пример

// crt_wcsrtombs_s.cpp
// 
// This code example converts a wide
// character string into a multibyte
// character string.
//

#include <stdio.h>
#include <memory.h>
#include <wchar.h>
#include <errno.h>

#define MB_BUFFER_SIZE 100

void main()
{
    const wchar_t   wcString[] = 
                    {L"Every good boy does fine."};
    const wchar_t   *wcsIndirectString = wcString;
    char            mbString[MB_BUFFER_SIZE];
    size_t          countConverted;
    errno_t         err;
    mbstate_t       mbstate;

    // Reset to initial shift state
    ::memset((void*)&mbstate, 0, sizeof(mbstate));

    err = wcsrtombs_s(&countConverted, mbString, MB_BUFFER_SIZE,
                      &wcsIndirectString, MB_BUFFER_SIZE, &mbstate);
    if (err == EILSEQ)
    {
        printf( "An encoding error was detected in the string.\n" );
    }
    else 
    {
        printf( "The string was successfully converted.\n" );
    }
}
  

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

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

Требования

Процедура

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

wcsrtombs_s

<wchar.h>

См. также

Ссылки

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

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

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

wcrtomb

wcrtomb_s

wctomb, _wctomb_l

wcstombs, _wcstombs_l

mbsinit