Sdílet prostřednictvím


wcsrtombs

Jeho znázornění řetězec vícebajtových znaků převeďte řetězec znaků.Bezpečnější verze této funkce je k dispozici; see wcsrtombs_s.

size_t wcsrtombs(
   char *mbstr,
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
);
template <size_t size>
size_t wcsrtombs(
   char (&mbstr)[size],
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
); // C++ only

Parametry

  • [výstup]mbstr
    Výsledný převést řetězec vícebajtových znaků adresu umístění.

  • [v]wcstr
    Nepřímo odkazuje na umístění převést řetězec znaků.

  • [v]count
    Počet znaků, které chcete převést.

  • [v]mbstate
    Ukazatel na mbstate_t převodu stavu objektu.

Vrácená hodnota

Vrátí počet bajtů úspěšně převeden, včetně není null ukončení bajt null (pokud existuje), jinak hodnota -1, pokud došlo k chybě.

Poznámky

wcsrtombs Funkce převede řetězec znaků široké, od státu zadaný převod obsažené v mbstate, z hodnoty nepřímé označenou v wcstr, na adresu mbstr.Pro každý znak, dokud bude pokračovat v převodu: po zjistil ukončení širokým znakem null, pokud je zjištěna bez odpovídající znak nebo po následující znak by překročil limit obsažené v count.Pokud wcsrtombs narazí znakem null celého znaku (L "\0") před nebo po count dojde, převede ho 8 bit 0 a zastaví.

Tedy řetězec vícebajtových znaků na mbstr je zakončený pouze tehdy, pokud wcsrtombs během převodu zjistí znakem null znaků.Pokud na sekvence odkazuje wcstr a mbstr překrývají, chování wcsrtombs nedefinovaná.wcsrtombsvliv LC_TYPE kategorie aktuální národní prostředí.

wcsrtombs Funkce se liší od wcstombs _wcstombs_l podle jeho restartability.Stav převodu je uložen v mbstate pro následné volání na stejné nebo jiné funkce s možností restartování.Výsledky nedefinované při použití funkce restartování a nonrestartable.Například použít aplikaci wcsrlen namísto wcsnlen, pokud následné volání wcsrtombs byly použity namísto wcstombs.

Pokud mbstr argument je NULL, wcsrtombs vrátí požadovaná velikost v bajtech cíl řetězec.Pokud mbstate má hodnotu null, vnitřní mbstate_t slouží k převodu stavu.Pokud je sekvence znaků wchar nemá odpovídající vícebajtové znakové vyjádření, je vrácena hodnota -1 a errno je nastavena na EILSEQ.

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

Výjimky

wcsrtombs , Funkce je bezpečné multithread žádná funkce v aktuální podproces volá setlocale v době, kdy je tato funkce spuštění a mbstate není null.

Příklad

// crt_wcsrtombs.cpp
// compile with: /W3
// This code example converts a wide
// character string into a multibyte
// character string.

#include <stdio.h>
#include <memory.h>
#include <wchar.h>
#include <errno.h>

#define MB_BUFFER_SIZE 100

int main()
{
    const wchar_t   wcString[] = 
                    {L"Every good boy does fine."};
    const wchar_t   *wcsIndirectString = wcString;
    char            mbString[MB_BUFFER_SIZE];
    size_t          countConverted;
    mbstate_t       mbstate;

    // Reset to initial shift state
    ::memset((void*)&mbstate, 0, sizeof(mbstate));

    countConverted = wcsrtombs(mbString, &wcsIndirectString,
                               MB_BUFFER_SIZE, &mbstate); // C4996
    // Note: wcsrtombs is deprecated; consider using wcsrtombs_s
    if (errno == EILSEQ)
    {
        printf( "An encoding error was detected in the string.\n" );
    }
    else 
    {
        printf( "The string was successfuly converted.\n" );
    }
}
  

Ekvivalent v rozhraní .NET Framework

Nelze použít Použijte volání funkce standardní C, PInvoke. Další informace naleznete v tématu Příklady vyvolat platformu.

Požadavky

Rutina

Požadované záhlaví

wcsrtombs

<wchar.h>

Viz také

Referenční dokumentace

Převod dat

Národní prostředí

Výklad vícebajtové znakové sekvence

wcrtomb

wcrtomb_s

wctomb _wctomb_l

wcstombs _wcstombs_l

mbsinit