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


wcrtomb_s

Преобразует расширенный символ в его представление в многобайтовом символе. Это версия wcrtomb с усовершенствованиями безопасности, как описано в Функции безопасности в CRT.

errno_t wcrtomb_s(
   size_t *pReturnValue,
   char *mbchar,
   size_t sizeOfmbchar,
   wchar_t *wchar,
   mbstate_t *mbstate
);
template <size_t size>
errno_t wcrtomb_s(
   size_t *pReturnValue,
   char (&mbchar)[size],
   wchar_t *wchar,
   mbstate_t *mbstate
); // C++ only

Параметры

  • [исходящий] pReturnValue
    Возвращает число записанных байт или -1 в случае возникновения ошибки.

  • [исходящий] mbchar
    Полученный преобразованный многобайтовый символ.

  • [входящий] sizeOfmbchar
    Размер переменной mbchar в байтах.

  • [входящий] wchar
    Расширенный символ, который необходимо преобразовать.

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

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

Возвращает ноль или значение errno при возникновении ошибки.

Заметки

Функция wcrtomb_s преобразует расширенный символ, начиная с определенного состояния преобразования, которое содержится в mbstate, из значения, содержащегося в wchar, по адресу, представленному в mbchar. Значение pReturnValue будет равно числу преобразованных байт, но не более MB_CUR_MAX байт, или -1 в случае возникновения ошибки.

Если mbstate имеет значение NULL, используется внутреннее состояние преобразования mbstate_t. Если символ, содержащийся в wchar, не имеет соответствующего многобайтового символа, значение pReturnValue будет равно -1, а функция вернет errno значение EILSEQ.

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

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

Исключения

Функция wcrtomb_s безопасна с точки зрения многопоточности, если ни одна из функций в данном потоке не вызывает setlocale, когда эта функция выполняется и mbstate равно NULL.

Пример

// crt_wcrtomb_s.c
// This program converts a wide character
// to its corresponding multibyte character.
//

#include <string.h>
#include <stdio.h>
#include <wchar.h>

int main( void )
{
    errno_t     returnValue;
    size_t      pReturnValue;
    mbstate_t   mbstate;
    size_t      sizeOfmbStr = 1;
    char        mbchar = 0;
    wchar_t*    wchar = L"Q\0";

    // Reset to initial conversion state
    memset(&mbstate, 0, sizeof(mbstate));

    returnValue = wcrtomb_s(&pReturnValue, &mbchar, sizeof(char),
                            *wchar, &mbstate);
    if (returnValue == 0) {
        printf("The corresponding wide character \"");
        wprintf(L"%s\"", wchar);
        printf(" was converted to a the \"%c\" ", mbchar);
        printf("multibyte character.\n");
    }
    else
    {
        printf("No corresponding multibyte character "
               "was found.\n");
    }
}
  

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

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

Требования

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

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

wcrtomb_s

<wchar.h>

См. также

Ссылки

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

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

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

mbsinit