Condividi tramite


wcsrtombs

Converte una stringa di caratteri wide nella relativa rappresentazione di stringa di caratteri multibyte. È disponibile una versione più sicura di questa funzione; vedere wcsrtombs_s.

Sintassi

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

mbstr
Posizione dell'indirizzo della stringa di caratteri multibyte convertita risultante.

wcstr
Punta indirettamente alla posizione della stringa di caratteri wide da convertire.

count
Numero di caratteri da convertire.

mbstate
Puntatore a un oggetto stato di conversione mbstate_t.

Valore restituito

Restituisce il numero di byte convertito correttamente, escluso il byte di terminazione Null, se presente. In caso contrario restituisce -1 se si verifica un errore.

Osservazioni:

La funzione wcsrtombs converte una stringa di caratteri wide, a partire dallo stato di conversione specificato contenuto in mbstate, dai valori a cui punta indirettamente wcstr, nell'indirizzo di mbstr. La conversione continuerà per ogni carattere fino a quando: viene rilevato un carattere wide di terminazione Null, viene rilevato un carattere non corrispondente o il carattere successivo causerebbe il superamento del limite contenuto in count. Se wcsrtombs rileva il carattere Null wide (L'\0') in corrispondenza di count o prima, lo converte in 0 a 8 bit e si arresta.

Pertanto, la stringa di caratteri multibyte in mbstr termina con Null solo se wcsrtombs rileva un carattere wide Null durante la conversione. Se le sequenze a cui punta wcstr e mbstr si sovrappongono, il comportamento di wcsrtombs non è definito. wcsrtombs viene influenzato dalla categoria LC_TYPE delle impostazioni locali correnti.

La wcsrtombs funzione differisce da wcstombs, _wcstombs_l in base alla riavviibilità. Lo stato di conversione viene archiviato in mbstate per le chiamate successive alle stesse o ad altre funzioni riavviabili. I risultati non sono definiti quando si usano insieme funzioni riavviabili e non riavviabili. Ad esempio, un'applicazione deve usare wcsrlen anziché wcsnlen se viene usata una chiamata successiva a wcsrtombs invece di wcstombs.

Se l'argomento mbstr è NULL, wcsrtombs restituisce le dimensioni necessarie in byte della stringa di destinazione. Se mbstate è Null, viene usato lo stato di conversione interno mbstate_t. Se la sequenza wchar di caratteri non ha una rappresentazione di caratteri multibyte corrispondente, viene restituito un -1 e viene errno impostato su EILSEQ.

In C++, questa funzione presenta un overload di modello che richiama la relativa controparte sicura più recente. Per altre informazioni, vedere Proteggere gli overload dei modelli.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Eccezioni

La wcsrtombs funzione è multithread safe purché nessuna funzione nel thread corrente chiami setlocale mentre questa funzione è in esecuzione e non mbstate è 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" );
    }
}
The string was successfuly converted.

Requisiti

Ciclo Intestazione obbligatoria
wcsrtombs <wchar.h>

Vedi anche

Conversione dei dati
impostazioni locali
Interpretazione di sequenze di caratteri multibyte
wcrtomb
wcrtomb_s
wctomb, _wctomb_l
wcstombs, _wcstombs_l
mbsinit