Condividi tramite


wcsrtombs

Convertire una stringa di caratteri estesi nella relativa rappresentazione di stringa di caratteri multibyte.Una versione più sicura di questa funzione è disponibile; vedere 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

Parametri

  • [out] mbstr
    La posizione relativa della stringa convertita risultante di caratteri multibyte.

  • [in] wcstr
    Indirettamente punti al percorso della stringa con caratteri estesi da convertire.

  • [in] count
    Il numero di caratteri da convertire.

  • [in] mbstate
    Un puntatore a un oggetto mbstate_t oggetto stato di conversione.

Valore restituito

Restituisce il numero di byte correttamente convertiti, escluso il byte null di terminazione null (se presenti), in caso contrario di un -1 se si è verificato un errore.

Note

wcsrtombs la funzione converte una stringa di caratteri di tipo " wide ", a partire dallo stato specificato di conversione contenuto in mbstate, quindi aguzzo indiretto di valori in wcstr, l'indirizzo di mbstr.la conversione continuerà per ogni carattere fino a: dopo che un carattere di tipo " wide " di terminazione null viene rilevato, quando un carattere non concordante viene rilevato o quando il carattere successivo determinerebbe un overflow del limite contenuto in count.se wcsrtombs rileva il carattere null a caratteri estesi (" \ 0 ") o prima o dopo count si verifica, lo converte in un 8 bit 0 e si arresta.

Pertanto, la stringa di caratteri multibyte a mbstr è con terminazione null solo se wcsrtombs rileva un carattere null di caratteri di tipo " wide " durante la conversione.Se le sequenze puntassero da wcstr e mbstr sovrapposizione, il comportamento di wcsrtombs è definito.wcsrtombs è interessati alla categoria di LC_TYPE delle impostazioni locali correnti.

wcsrtombs la funzione è diverso da wcstombs, _wcstombs_l dal restartability.Lo stato di conversione viene archiviato in mbstate per le chiamate successive agli stessi o ad altre funzioni restartable.I risultati vengono definiti quando si combinano l'utilizzo delle funzioni restartable e nonrestartable.Ad esempio, un'applicazione utilizzerebbe wcsrlen anziché wcsnlen, se una chiamata successiva a wcsrtombs sono stati utilizzati anziché wcstombs.

se mbstr l'argomento è NULL, wcsrtombs restituisce la dimensione richiesta in byte della stringa di destinazione.se mbstate è null, l'interno mbstate_t lo stato di conversione viene utilizzato.se la sequenza di caratteri wchar non dispone di una rappresentazione di caratteri multibyte corrispondente, -1 viene restituito e errno è impostato su EILSEQ.

In C++, la funzione presenta un overload del modello che richiama la più recente, controparte protetta della funzione.Per ulteriori informazioni, vedere Assicurarsi che gli overload del modello.

Eccezioni

wcsrtombs la funzione è multithread-safe se nessuna funzione nelle chiamate del thread corrente setlocale questa funzione è in esecuzione e mbstate non è null.

Esempio

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

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.

Requisiti

routine

Intestazione di associazione

wcsrtombs

<wchar.h>

Vedere anche

Riferimenti

Conversione di dati

Impostazioni locali

Interpretazione delle sequenze di caratteri multibyte

wcrtomb

wcrtomb_s

wctomb, _wctomb_l

wcstombs, _wcstombs_l

mbsinit