Compartilhar via


mbstowcs, _mbstowcs_l

Converte uma sequência de caracteres multibyte a uma sequência de caracteres amplos correspondente. Versões mais seguras dessas funções estão disponíveis; consulte 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

Parâmetros

  • [out] wcstr
    O endereço de uma sequência de caracteres amplos.

  • [in] mbstr
    O endereço de uma sequência de zero terminou caracteres multibyte.

  • [entrada] count
    O número máximo de caracteres multibyte a ser convertida.

  • [entrada] locale
    A localidade a ser usada.

Valor de retorno

Se mbstowcs converte a cadeia de caracteres de origem, retorna o número de caracteres convertidos de vários bytes. Se o argumento de wcstr é NULL, a função retornará o tamanho necessário (em caracteres amplos) da cadeia de caracteres de destino. Se mbstowcs encontrar um caractere inválido multibyte, 1 será retornado. Se o valor de retorno é count, a cadeia de caracteres de ampla caractere nulo não é encerrada.

Observação de segurançaObservação de segurança

Certifique-se de que wcstr e mbstr não se sobrepõem, e que count reflete corretamente o número de caracteres multibyte para converter.

Comentários

A função de mbstowcs converte até um número máximo de caracteres multibyte de count apontados por mbstr a uma cadeia de caracteres de corresponder os caracteres largos que são determinados pela localidade atual. Armazena a cadeia de caracteres resultante ampla de caracteres no endereço representado por wcstr*.* O resultado é semelhante a uma série de chamadas a mbtowc. Se mbstowcs encontrar o caractere nulo de byte único (“\ ") ou 0 antes ou count quando ocorrer, converte o caractere nulo em um caractere nulo ampla de caracteres (L \ 0 ') e paradas. Portanto a cadeia de caracteres de ampla caractere em wcstr tiver terminação apenas se um caractere nulo for encontrado durante a conversão. Se as sequências apontadas por wcstr e a sobreposição de mbstr , o comportamento são indefinidas.

Se o argumento de wcstr é NULL, mbstowcs retorna o número de caracteres largos que resultariam de conversão, não incluindo um terminador nulo. A cadeia de caracteres de origem deve terminar ser finalizada para que o valor correto ser retornado. Se você precisar mais da cadeia de caracteres resultante todo terminar de ser concluído, adicione uma ao valor retornado.

Se o argumento de mbstr é NULL, ou se count é >INT_MAX, o manipulador inválido do parâmetro será chamado, conforme descrito em Validação do parâmetro . Se a execução for permitida continuar, o errno está definido como EINVAL e a função retorna -1.

mbstowcs usa a localidade atual para qualquer comportamento dependente de localidade; _mbstowcs_l é idêntico exceto que usa a localidade passada por vez. Para obter mais informações, consulte Localidade.

No C++, essas funções têm as sobrecargas de modelo que invocam as correspondentes seguras mais recentes dessas funções. Para obter mais informações, consulte Sobrecargas de modelo seguras.

Requisitos

Rotina

Cabeçalho necessário

mbstowcs

<stdlib.h>

_mbstowcs_l

<stdlib.h>

Para informações adicionais de compatibilidade, consulte Compatibilidade na Introdução.

Exemplo

// 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);
}
  

Equivalência do .NET Framework

Não aplicável. Para chamar a função padrão de C, use PInvoke. Para obter mais informações, consulte Exemplos de chamadas de plataformas.

Consulte também

Referência

Conversão de dados

Localidade

Interpretação de sequências de caracteres multibyte

_mbclen, mblen, _mblen_l

mbtowc, _mbtowc_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l

MultiByteToWideChar