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


wcrtomb

Преобразует расширенный символ в его представление в многобайтовом символе. Существует более безопасная версия этой функции; см. раздел wcrtomb_s.

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

Параметры

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

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

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

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

Возвращает число байтов, необходимое для представления преобразованного многобайтового символа; в противном случае — значение -1 при возникновении ошибки.

Заметки

Функция wcrtomb преобразует расширенный символ, начиная с определенного состояния преобразования, которое содержится в mbstate, из значения, содержащегося в wchar, по адресу, представленному в mbchar. Возвращает количество байтов, необходимое для представления соответствующего многобайтового символа, но не возвращает больше MB_CUR_MAX байтов.

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

Функция wcrtomb отличается от wctomb, _wctomb_l возможностью перезапуска. Состояние преобразования хранится в mbstate для последующих вызовов тех же или других прерываемых функций. Результаты не определены, когда происходит смешивание прерываемых и непрерываемых функций. Например, приложение скорее будет использовать wcsrlen вместо wcsnlen, если последующий вызов wcsrtombs использовался вместо wcstombs.

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

Исключения

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

Пример

// crt_wcrtomb.c
// compile with: /W3
// This program converts a wide character
// to its corresponding multibyte character.

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

int main( void )
{
    size_t      sizeOfCovertion = 0;
    mbstate_t   mbstate;
    char        mbStr = 0;
    wchar_t*    wcStr = L"Q";

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

    sizeOfCovertion = wcrtomb(&mbStr, *wcStr, &mbstate); // C4996
    // Note: wcrtomb is deprecated; consider using wcrtomb_s instead
    if (sizeOfCovertion > 0)
    {
        printf("The corresponding wide character \"");
        wprintf(L"%s\"", wcStr);
        printf(" was converted to the \"%c\" ", mbStr);
        printf("multibyte character.\n");
    }
    else
    {
        printf("No corresponding multibyte character "
               "was found.\n");
    }
}
  

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

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

Требования

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

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

wcrtomb

<wchar.h>

См. также

Ссылки

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

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

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

mbsinit