Udostępnij za pośrednictwem


wcrtomb

Przekonwertuj znak szeroki na reprezentację znaków wielobajtowych. Dostępna jest bezpieczniejsza wersja tej funkcji; zobacz wcrtomb_s.

Składnia

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

Parametry

mbchar
Wynikowy znak wielobajtowy przekonwertowany.

wchar
Szeroki znak do konwersji.

mbstate
Wskaźnik do mbstate_t obiektu.

Wartość zwracana

Zwraca liczbę bajtów wymaganych do reprezentowania przekonwertowanego znaku wielobajtowego, w przeciwnym razie wartość -1, jeśli wystąpi błąd.

Uwagi

Funkcja wcrtomb konwertuje szeroki znak, zaczynając od określonego stanu konwersji zawartego w , z wartości zawartej w wcharmbstate, na adres reprezentowany przez mbchar. Wartość zwracana jest liczbą bajtów wymaganych do reprezentowania odpowiadającego mu znaku wielobajtowego, ale nie zwróci więcej niż MB_CUR_MAX bajtów.

Jeśli mbstate ma wartość null, używany jest wewnętrzny mbstate_t obiekt zawierający stan konwersji mbchar elementu . Jeśli sekwencja wchar znaków nie ma odpowiedniej reprezentacji znaków wielobajtowych, zwracana jest wartość -1, a errno parametr jest ustawiony na EILSEQwartość .

Funkcja wcrtomb różni się od wctombfunkcji , _wctomb_l dzięki możliwości ponownego uruchamiania. Stan konwersji jest przechowywany dla mbstate kolejnych wywołań do tych samych lub innych funkcji możliwych do ponownego uruchomienia. Wyniki są niezdefiniowane podczas mieszania funkcji możliwych do ponownego uruchomienia i niezwiązanych z uruchamianiem. Na przykład aplikacja będzie używać wcsrlen zamiast wcsnlen, jeśli kolejne wywołanie wcsrtombs zostało użyte zamiast wcstombs.

W języku C++ta funkcja ma przeciążenie szablonu, które wywołuje nowsze, bezpieczne odpowiedniki tej funkcji. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wyjątki

wcrtomb Funkcja jest bezpieczna wielowątkowość, o ile nie ma funkcji w bieżących wywołaniach setlocale wątku podczas wykonywania tej funkcji i gdy mbstate parametr ma wartość null.

Przykład

// 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");
    }
}
The corresponding wide character "Q" was converted to the "Q" multibyte character.

Wymagania

Procedura Wymagany nagłówek
wcrtomb <wchar.h>

Zobacz też

Konwersja danych
ustawienia regionalne
Interpretacja sekwencji znaków wielobajtowych
mbsinit