Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Převede posloupnost širokých znaků na odpovídající sekvenci vícebajtových znaků. K dispozici jsou bezpečnější verze těchto funkcí; viz wcstombs_s, _wcstombs_s_l.
Syntaxe
size_t wcstombs(
char *mbstr,
const wchar_t *wcstr,
size_t count
);
size_t _wcstombs_l(
char *mbstr,
const wchar_t *wcstr,
size_t count,
_locale_t locale
);
template <size_t size>
size_t wcstombs(
char (&mbstr)[size],
const wchar_t *wcstr,
size_t count
); // C++ only
template <size_t size>
size_t _wcstombs_l(
char (&mbstr)[size],
const wchar_t *wcstr,
size_t count,
_locale_t locale
); // C++ only
Parametry
mbstr
Adresa posloupnosti vícebajtových znaků.
wcstr
Adresa posloupnosti širokých znaků.
count
Maximální počet bajtů, které lze uložit ve výstupním řetězci s vícebajty.
locale
Národní prostředí, které se má použít
Vrácená hodnota
Pokud wcstombs se vícebajtový řetězec úspěšně převede, vrátí počet bajtů zapsaných do výstupního řetězce s vícebajty s výjimkou ukončování NULL (pokud existuje). mbstr Pokud argument je NULL, wcstombs vrátí požadovanou velikost v bajtech cílového řetězce. Pokud wcstombs narazí na široký znak, nemůže převést na vícebajtový znak, vrátí hodnotu -1 pro typ size_t a nastaví errno hodnotu EILSEQ.
Poznámky
Funkce wcstombs převede řetězec širokého znaku odkazovaný na wcstr odpovídající vícebajtové znaky a uloží výsledky do mbstr pole. Parametr count označuje maximální počet bajtů, které lze uložit ve výstupním řetězci s vícebajty (to znamená velikost mbstr). Obecně platí, že při převodu řetězce s širokým znakem není známo, kolik bajtů se bude vyžadovat. Některé široké znaky budou ve výstupním řetězci vyžadovat pouze jeden bajt; jiné vyžadují 2 bajty. Pokud je ve výstupním řetězci s vícebajty 2 bajty pro každý široký znak ve vstupním řetězci (včetně širokého znaku NULL), je zaručeno, že se výsledek vejde.
Počínaje Windows 10 verze 1803 (10.0.17134.0) podporuje Univerzální modul C Runtime použití znakové stránky UTF-8. Umožňuje wcstombs(NULL, wcstr, 0) získat správnou velikost, kterou budete potřebovat pro převod, protože za předpokladu, že budete potřebovat dva bajty pro každý široký znak, nemusí být dost. Další informace o podpoře UTF-8 naleznete v tématu Podpora UTF-8
Pokud wcstombs se setkáte se znakem širokého znaku NULL (L'\0) před nebo v případě count výskytu, převede ho na 8bitovou 0 a zastaví. Řetězec vícebajtového znaku mbstr s hodnotou null je tedy ukončen pouze v případě, že wcstombs během převodu narazíte na znak širokého znaku NULL . Pokud se sekvence ukazující wcstr na a mbstr překrývají se, chování wcstombs není definováno.
mbstr Pokud argument je NULL, wcstombs vrátí požadovanou velikost v bajtech cílového řetězce.
wcstombs ověří jeho parametry. Pokud wcstr je NULLnebo je count větší INT_MAX, tato funkce vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, funkce nastaví errno EINVAL hodnotu -1 a vrátí hodnotu -1.
wcstombs používá aktuální národní prostředí pro jakékoli chování závislé na národním prostředí; _wcstombs_l je shodný s tím rozdílem, že místo toho používá národní prostředí předané. Další informace naleznete v tématu Národní prostředí.
V jazyce C++ mají tyto funkce přetížení šablon, které vyvolávají novější zabezpečené protějšky těchto funkcí. 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.
Požadavky
| Rutina | Požadovaný hlavičkový soubor |
|---|---|
wcstombs |
<stdlib.h> |
_wcstombs_l |
<stdlib.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
Tento program znázorňuje chování wcstombs funkce.
// crt_wcstombs.c
// compile with: /W3
// This example demonstrates the use
// of wcstombs, which converts a string
// of wide characters to a string of
// multibyte characters.
#include <stdlib.h>
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
size_t count;
char *pMBBuffer = (char *)malloc( BUFFER_SIZE );
wchar_t *pWCBuffer = L"Hello, world.";
printf("Convert wide-character string:\n" );
count = wcstombs(pMBBuffer, pWCBuffer, BUFFER_SIZE ); // C4996
// Note: wcstombs is deprecated; consider using wcstombs_s instead
printf(" Characters converted: %u\n",
count );
printf(" Multibyte character: %s\n\n",
pMBBuffer );
free(pMBBuffer);
}
Convert wide-character string:
Characters converted: 13
Multibyte character: Hello, world.
Viz také
Konverze dat
Národní prostředí
_mbclen, , mblen_mblen_l
mbstowcs, _mbstowcs_l
mbtowc, _mbtowc_l
wctomb, _wctomb_l
WideCharToMultiByte