Udostępnij za pośrednictwem


wcrtomb

Przekonwertować szerokich znaków na jego reprezentacji znaków wielobajtowych.Bardziej bezpieczna wersja ta funkcja jest dostępna; see 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

Parametry

  • [out]mbchar
    Wynikowy wielobajtowe konwersji znaków.

  • [w]wchar
    Szerokich znaków do konwertowania.

  • [w]mbstate
    Wskaźnik do mbstate_t obiektu.

Wartość zwracana

Zwraca liczbę bajtów wymaganych do reprezentowania przekonwertowanych znaków wielobajtowych, w przeciwnym razie -1 w przypadku wystąpienia błędu.

Uwagi

wcrtomb Funkcja konwertuje szerokich znaków, począwszy od stanu określonej konwersji zawartych w mbstate, od wartości zawartych w wchar, na adres, reprezentowana przez mbchar.Zwracana wartość jest liczbą bajtów potrzebną do reprezentowania odpowiednich znaków wielobajtowych, ale nie zwróci więcej niż MB_CUR_MAX bajtów.

Jeśli mbstate ma wartość null, wewnętrznego mbstate_t zawierających stan konwersji obiektu mbchar jest używana.Jeżeli sekwencja znaków wchar nie ma odpowiedniego wielobajtowe reprezentacji znaków, zwracany jest -1 i errno jest ustawiona na EILSEQ.

wcrtomb Funkcja różni się od wctomb, _wctomb_l przez jego restartability.Stan konwersji jest przechowywany w mbstate dla kolejnych zaproszeń na to samo lub inne funkcje Przerywalne.Wyniki są niezdefiniowane, przy użyciu funkcji Przerywalne i nonrestartable.Na przykład, aplikacja będzie korzystać z wcsrlen zamiast wcsnlen, jeśli kolejne wywołania wcsrtombs zostały użyte zamiast wcstombs.

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

Wyjątki

wcrtomb Funkcja jest wielowątkowym bezpieczne tak długo, jak długo wywoła żadnej funkcji w bieżącym wątku setlocale podczas wykonywania tej funkcji, a zarazem mbstate 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");
    }
}
  

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywołać standardowych funkcji C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

wcrtomb

<wchar.h>

Zobacz też

Informacje

Konwersja danych

Ustawienia regionalne

Interpretacja sekwencje znaków wielobajtowych

mbsinit