Sdílet prostřednictvím


mbstowcs, _mbstowcs_l

Posloupnost vícebajtové znaky převede na odpovídající sekvenci znaků široký.Bezpečnější verze těchto funkcí jsou k dispozici; viz mbstowcs_s, _mbstowcs_s_l.

size_t mbstowcs(
   wchar_t *wcstr,
   const char *mbstr,
   size_t count 
);
size_t _mbstowcs_l(
   wchar_t *wcstr,
   const char *mbstr,
   size_t count,
   _locale_t locale
);
template <size_t size>
size_t mbstowcs(
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count 
); // C++ only
template <size_t size>
size_t _mbstowcs_l(
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count,
   _locale_t locale
); // C++ only

Parametry

  • [out] wcstr
    Adresa posloupnost znaků na šířku.

  • [v] mbstr
    Adresa sekvence null ukončena vícebajtové znaky.

  • [in] count
    Maximální počet vícebajtové znaky, které chcete převést.

  • [in] locale
    Použité národní prostředí.

Vrácená hodnota

Pokud mbstowcs úspěšně převádí zdrojový řetězec, vrátí převedené vícebajtové znaky.Pokud wcstr argument je NULL, vrátí funkce požadované velikosti (v široké znaky) cílový řetězec.Pokud mbstowcs nalezne neplatný vícebajtové znakové vrátí -1.Pokud je vrácená hodnota count, řetězec širokého znaku není zakončený hodnotou null.

Poznámka k zabezpečeníPoznámka k zabezpečení

Zajistit, aby wcstr a mbstr se nepřekrývají a že count správně odpovídá počtu vícebajtové znaky, které chcete převést.

Poznámky

mbstowcs Funkce převede maximální počet count vícebajtových znaků ukazující na mbstr na řetězec odpovídající široké znaky, které jsou určeny pro aktuální národní prostředí.Uloží výsledný řetězec širokého znaku na adrese reprezentované wcstr*.* Výsledkem je posloupnost volání podobné mbtowc.Pokud mbstowcs narazí jednobajtové znak null ('\0') před nebo po count dojde, převede znak null znak null širokého znaku (L '\0') a zastaví.Tedy řetězce širokého znaku na wcstr je zakončený pouze v případě, že během převodu došlo k znak null.Pokud je sekvence odkazuje wcstr a mbstr překrytí, chování není definováno.

Pokud wcstr argument je NULL, mbstowcs vrací počet široké znaky, které by mohly být výsledkem převodu, ne včetně null zakončení.Zdrojový řetězec musí být zakončený správné hodnoty mají být vráceny.Pokud potřebujete výsledný řetězec širokého znaku být zakončený hodnotou null, přidáte vrácené hodnoty.

Pokud mbstr argument je NULL, nebo -li count je >INT_MAX, je vyvolán neplatný parametr obslužné rutiny, jak je popsáno v Ověření parametru .Pokud je povoleno pokračovat v provádění, kód chyby je nastavena na EINVAL a vrátí -1.

mbstowcspoužívá aktuální národní prostředí pro všechny závislé chování; _mbstowcs_l je totožný s tím rozdílem, že používá místo něho předán národní prostředí.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í zabezpečení šablony.

Požadavky

Rutina

Požadované záhlaví

mbstowcs

<stdlib.h>

_mbstowcs_l

<stdlib.h>

Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.

Příklad

// crt_mbstowcs.c
// compile with: /W3
// illustrates the behavior of the mbstowcs function

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>

int main( void )
{
    size_t size;
    int nChar = 2; // number of characters to convert
    int requiredSize;

    unsigned char    *pmbnull  = NULL;
    unsigned char    *pmbhello = NULL;
    char* localeInfo;
    
    wchar_t *pwchello = L"\x3042\x3043"; // 2 Hiragana characters
    wchar_t *pwc;

    /* Enable the Japanese locale and codepage */
    localeInfo = setlocale(LC_ALL, "Japanese_Japan.932");
    printf("Locale information set to %s\n", localeInfo);
    
    printf( "Convert to multibyte string:\n" );

    requiredSize = wcstombs( NULL, pwchello, 0); // C4996
    // Note: wcstombs is deprecated; consider using wcstombs_s
    printf("  Required Size: %d\n", requiredSize);

    /* Add one to leave room for the null terminator. */
    pmbhello = (unsigned char *)malloc( requiredSize + 1);
    if (! pmbhello)
    {
        printf("Memory allocation failure.\n");
        return 1;
    }
    size = wcstombs( pmbhello, pwchello, requiredSize + 1); // C4996
    // Note: wcstombs is deprecated; consider using wcstombs_s
    if (size == (size_t) (-1))
    {
        printf("Couldn't convert string. Code page 932 may"
                " not be available.\n");
        return 1;
    }
    printf( "  Number of bytes written to multibyte string: %u\n",
            (unsigned int) size );
    printf( "  Hex values of the " );
    printf( " multibyte characters: %#.2x %#.2x %#.2x %#.2x\n",
            pmbhello[0], pmbhello[1], pmbhello[2], pmbhello[3] );
    printf( "  Codepage 932 uses 0x81 to 0x9f as lead bytes.\n\n");

    printf( "Convert back to wide-character string:\n" );

    /* Assume we don't know the length of the multibyte string.
     Get the required size in characters, and allocate enough space. */

    requiredSize = mbstowcs(NULL, pmbhello, 0); // C4996
    /* Add one to leave room for the NULL terminator */
    pwc = (wchar_t *)malloc( (requiredSize + 1) * sizeof( wchar_t ));
    if (! pwc)
    {
        printf("Memory allocation failure.\n");
        return 1;
    }
    size = mbstowcs( pwc, pmbhello, requiredSize + 1); // C4996
    if (size == (size_t) (-1))
    {
       printf("Couldn't convert string--invalid multibyte character.\n");
    }
    printf( "  Characters converted: %u\n", (unsigned int)size );
    printf( "  Hex value of first 2" );
    printf( " wide characters: %#.4x %#.4x\n\n", pwc[0], pwc[1] );
    free(pwc);
    free(pmbhello);
}
  

Ekvivalent v rozhraní .NET Framework

Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.

Viz také

Referenční dokumentace

Převod dat

Národní prostředí

Výklad sekvencí vícebajtových znaků

_mbclen, mblen, _mblen_l

mbtowc, _mbtowc_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l

MultiByteToWideChar