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 mbstate
v 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_s
mož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