Condividi tramite


wcsrtombs

Converte una stringa di caratteri estesi nella relativa rappresentazione di stringa di caratteri multibyte. È disponibile una versione più sicura di questa funzione; consultare 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 dell'indirizzo della stringa convertita in caratteri multibyte risultante.

  • [in] wcstr
    Punta indirettamente al percorso della stringa di caratteri wide da convertire.

  • [in] count
    Numero di caratteri da convertire.

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

Valore restituito

Restituisce il numero di byte convertite correttamente, escluso il byte di terminazione null se presente, in caso contrario restituisce -1 se si è verificato un errore.

Note

La funzione wcsrtombs converte una stringa di caratteri wide, a partire dallo stato specificato di conversione contenuto in mbstate, dai valori indirettamente puntati da wcstr, negli indirizzi di mbstr. La conversione continua per ogni carattere fino a quando non viene rilevato un carattere wide di terminazione null, oppure quando viene rilevato un carattere non concordante o quando il carattere successivo eccede il limite specificato in count. Se wcsrtombs rileva il carattere wide null (L'\0') o prima o in corrispondenza di count, lo converte in uno 0 ad 8 bit e si arresta.

Pertanto, la stringa di caratteri multibyte in mbstr ha terminazione null solo se wcsrtombs rileva un carattere wide null durante la conversione. Se le sequenze puntate da wcstr e sovrapposizione mbstr, il comportamento wcsrtombs non è definito. wcsrtombs è influenzata dalla categoria di LC_TYPE delle impostazioni locali correnti.

La funzione wcsrtombs differisce da wcstombs, _wcstombs_l dalla sua possibilità di essere avviata nuovamente. Lo stato di conversione viene archiviato in mbstate per le chiamate successive alla stessa o ad altre funzioni avviabili nuovamente. I risultati non sono definiti quando si combina l'utilizzo delle funzioni avviabili nuovamente e non avviabili nuovamente. Ad esempio, un'applicazione utilizzerebbe wcsrlen anziché wcsnlen, se è stata utilizzata una chiamata successiva a wcsrtombs al posto di wcstombs.

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

In C++, questa funzione presenta un overload del modello che invoca le relative controparti sicure e più recenti. Per ulteriori informazioni, vedere Overload di modelli sicuri.

Eccezioni

La funzione wcsrtombs è multithread-safe mentre nessuna funzione nella thread corrente chiama setlocale mentre 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 standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

Requisiti

Routine

Intestazione obbligatoria

wcsrtombs

<wchar.h>

Vedere anche

Riferimenti

Conversione dei dati

Impostazioni locali

Interpretazione di sequenze di caratteri multibyte

wcrtomb

wcrtomb_s

wctomb, _wctomb_l

wcstombs, _wcstombs_l

mbsinit