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 mbstate
v 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 EILSEQ
hodnotu .
Funkce wcrtomb
se liší od wctomb
mož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 wcsrlen
wcsnlen
, 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é
Konverze dat
Národní prostředí
Interpretace vícebajtových sekvencí znaků
mbsinit