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> |