Compartilhar via


wcsrtombs

Converter uma seqüência de caractere longa em sua representação de seqüência de caractere multibyte.Uma versão mais segura desta função está disponível; consulte 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

Parâmetros

  • [out] mbstr
    O resultante convertido endereço local da seqüência de caractere multibyte.

  • [in]wcstr
    Indiretamente aponta para o local da ampla seqüência de caractere a ser convertido.

  • [in]count
    O número de caractere a ser convertido.

  • [in]mbstate
    Um ponteiro para um mbstate_t objeto de estado de conversão.

Valor de retorno

Retorna o número de bytes convertido com êxito, não incluindo nulo de terminação byte nulo (se houver), caso contrário, -1 se tiver ocorrido um erro.

Comentários

The wcsrtombs função converte uma seqüência de caracteres de largura, começando no estado de conversão especificada contido no mbstate, dos valores indiretos apontados no wcstr, no endereço de mbstr. Continuará a conversão para cada caractere até: Depois que um valor nulo caractere largo de terminação é encontrado, quando um caractere correspondente não for encontrado ou quando o próximo caractere excederia o limite contido em count. If wcsrtombs encontra o caractere nulo de caractere largo (L '\0') antes ou quando count ocorre, ele converte para um 0 8 bit e pára.

Assim, a seqüência de caracteres multibyte em mbstr é terminada com nulo somente se wcsrtombs encontra um caractere nulo de caractere largo durante a conversão. Se as seqüências apontada por wcstr e mbstr se sobrepõem, o comportamento do wcsrtombs não está definida. wcsrtombs é afetado pela categoria do LC_TYPE da localidade corrente.

The wcsrtombs função difere wcstombs, _wcstombs_l por sua capacidade de reinicialização. O estado de conversão é armazenado em mbstate para chamadas subseqüentes para o mesmo ou Outros funções reinicializáveis. Os resultados são indefinidos ao misturar o uso de funções nonrestartable e reinicializáveis.Por exemplo, um aplicativo utilize wcsrlen em vez de wcsnlen, se uma telefonar subseqüente para wcsrtombs foi usado em vez de wcstombs.

Se o mbstr o argumento é NULL, wcsrtombs Retorna o dimensionar necessário em bytes da seqüência de caracteres de destino. If mbstate for nulo, o interno mbstate_t conversão de estado é usado. Se o caractere de sequênciawchar não tem um correspondente multibyte representação de caracteres, -1 é retornado e a errno é definido como EILSEQ.

No C++, essa função tem uma sobrecarga de modelo que invoca a contraparte mais recente e segura dessa função.For more information, see Proteger overloads de modelo.

Exceções

The wcsrtombs função é safe com vários threads sistema autônomo longo sistema autônomo nenhuma função nas chamadas de thread corrente setlocale durante a execução dessa função e o mbstate é nulo.

Exemplo

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

The string was successfuly converted.

Equivalente do NET Framework

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

Requisitos

Rotina

Cabeçalho necessário

wcsrtombs

<wchar.h>

Consulte também

Referência

Conversão de Dados

Localidade

Interpretação de seqüências de caractere multibyte

wcrtomb

wcrtomb_s

wctomb, _wctomb_l

wcstombs, _wcstombs_l

mbsinit