Sdílet prostřednictvím


wcrtomb

Převede široký znak na vícebajtovou reprezentaci znaků. K dispozici je bezpečnější verze této funkce; viz .wcrtomb_s

Syntaxe

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
Výsledný vícebajtový převedený znak.

wchar
Široký znak, který chcete převést.

mbstate
Ukazatel na mbstate_t objekt.

Vrácená hodnota

Vrátí počet bajtů požadovaných k reprezentaci převedeného vícebajtového znaku, jinak pokud dojde k chybě, vrátí hodnotu -1.

Poznámky

Funkce wcrtomb převede široký znak, počínaje zadaným stavem převodu obsaženým mbstatev hodnotě obsažené v wchar, na adresu reprezentovanou mbchar. Vrácená hodnota je počet bajtů potřebných k reprezentaci odpovídajícího vícebajtového znaku, ale nevrátí více než MB_CUR_MAX bajty.

Pokud mbstate má hodnotu null, použije se interní mbstate_t objekt obsahující stav převodu mbchar . Pokud sekvence wchar znaků nemá odpovídající vícebajtovou reprezentaci znaků, vrátí se hodnota -1 a errno nastaví se na EILSEQhodnotu .

Funkce wcrtomb se liší od wctombmožnosti _wctomb_l restartování. Stav převodu se uloží mbstate pro následná volání stejných nebo jiných restartovatelných funkcí. Výsledky nejsou definovány při kombinování použití restartovatelných a nerestartovatelných funkcí. Například aplikace by místo wcsrlenwcsnlen, pokud následné volání wcsrtombs bylo použito místo wcstombs.

V jazyce C++ má tato funkce přetížení šablony, které vyvolá novější zabezpečené protějšky této funkce. Další informace naleznete v tématu Přetížení šablon zabezpečení.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Výjimky

Funkce wcrtomb je vícevláknová bezpečná, pokud žádná funkce v aktuálním vlákně volání setlocale , zatímco tato funkce se spouští a zatímco mbstate je null.

Příklad

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

Požadavky

Rutina Požadovaný hlavičkový soubor
wcrtomb <wchar.h>

Viz také

Převod dat
Národní prostředí
Interpretace vícebajtových sekvencí znaků
mbsinit