Sdílet prostřednictvím


wcrtomb_s

Převede široký znak na vícebajtovou reprezentaci znaků. Verze wcrtomb s vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.

Syntaxe

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

Parametry

pReturnValue
Vrátí počet zapsaných bajtů nebo -1, pokud došlo k chybě.

mbchar
Výsledný vícebajtový převedený znak.

sizeOfmbchar
Velikost mbchar proměnné v bajtech.

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

mbstate
Ukazatel na mbstate_t objekt.

Vrácená hodnota

Vrátí nulu errno nebo hodnotu, pokud dojde k chybě.

Poznámky

Funkce wcrtomb_s převede široký znak, počínaje zadaným stavem převodu obsaženým mbstatev hodnotě obsažené v wchar, na adresu reprezentovanou mbchar. Hodnota pReturnValue bude počet převedených bajtů, ale ne více než MB_CUR_MAX bajty nebo -1, pokud došlo k chybě.

Pokud mbstate je hodnota null, použije se stav interního mbstate_t převodu. Pokud znak obsažený wchar v nemá odpovídající vícebajtový znak, hodnota pReturnValue je -1 a funkce vrátí errno hodnotu EILSEQ.

Funkce wcrtomb_s se liší od wctomb_smožnosti _wctomb_s_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 wcsrlen wcslen, pokud následné volání wcsrtombs_s bylo použito místo wcstombs_s.

V jazyce C++ je použití této funkce zjednodušeno přetížením šablony; přetížení mohou automaticky odvodit délku vyrovnávací paměti (eliminuje potřebu zadat argument velikosti) a mohou automaticky nahradit starší, nezabezpečené funkce jejich novějšími zabezpečenými protějšky. 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_s je vícevláknová bezpečná, pokud žádná funkce v aktuálním vlákně volání setlocale při provádění této funkce a mbstate má hodnotu null.

Příklad

// crt_wcrtomb_s.c
// This program converts a wide character
// to its corresponding multibyte character.
//

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

int main( void )
{
    errno_t     returnValue;
    size_t      pReturnValue;
    mbstate_t   mbstate;
    size_t      sizeOfmbStr = 1;
    char        mbchar = 0;
    wchar_t*    wchar = L"Q\0";

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

    returnValue = wcrtomb_s(&pReturnValue, &mbchar, sizeof(char),
                            *wchar, &mbstate);
    if (returnValue == 0) {
        printf("The corresponding wide character \"");
        wprintf(L"%s\"", wchar);
        printf(" was converted to a the \"%c\" ", mbchar);
        printf("multibyte character.\n");
    }
    else
    {
        printf("No corresponding multibyte character "
               "was found.\n");
    }
}
The corresponding wide character "Q" was converted to a the "Q" multibyte character.

Požadavky

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

Viz také

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