Condividi tramite


mbsrtowcs_s

Convertire una stringa di caratteri multibyte nelle impostazioni locali correnti in una rappresentazione di stringa di caratteri wide. Versione di mbsrtowcs con i miglioramenti della sicurezza come descritto Funzionalità di sicurezza in CRT.

errno_t mbsrtowcs_s(    size_t * pReturnValue,    wchar_t * wcstr,    size_t sizeInWords,    const char ** mbstr,    size_t count,    mbstate_t * mbstate ); template <size_t size> errno_t mbsrtowcs_s(    size_t * pReturnValue,    wchar_t (&wcstr)[size],    const char ** mbstr,    size_t count,    mbstate_t * mbstate ); // C++ only

Parametri

  • [out] pReturnValue
    Numero di caratteri convertiti.

  • [out] wcstr
    Indirizzo del buffer in cui archiviare la stringa di caratteri wide convertita risultante.

  • [out] sizeInWords
    Dimensioni di wcstr in parole (caratteri wide).

  • [in, out] mbstr
    Puntatore indiretto alla posizione della stringa di caratteri multibyte da convertire.

  • [in] count
    Numero massimo di caratteri wide da archiviare nel buffer wcstr, escluso il carattere Null finale o _TRUNCATE.

  • [in, out] mbstate
    Puntatore a un oggetto stato di conversione mbstate_t. Se questo valore è un puntatore Null, viene usato un oggetto stato di conversione interno statico. Poiché l'oggetto mbstate_t interno non è thread-safe, è consigliabile passare sempre un parametro mbstate fornito dall'utente.

Valore restituito

Se la conversione viene eseguita correttamente restituisce zero, in caso contrario un codice di errore.

Condizione di errore

Valore restituito e errno

wcstr è un puntatore Null e sizeInWords > 0

EINVAL

mbstr è un puntatore Null

EINVAL

La stringa a cui punta indirettamente mbstr contiene una sequenza multibyte non valida per le impostazioni locali correnti.

EILSEQ

Il buffer di destinazione è troppo piccolo per contenere la stringa convertita (a meno che count non sia _TRUNCATE. Per altre informazioni, vedere Note)

ERANGE

Se si verifica una di queste condizioni, viene richiamata l'eccezione di parametro non valido come descritto in Convalida dei parametri . Se l'esecuzione può continuare, la funzione restituisce un codice errore e imposta errno come indicato nella tabella.

Note

La funzione mbsrtowcs_s converte una stringa di caratteri multibyte a cui punta indirettamente mbstr in caratteri wide archiviati nel buffer a cui punta wcstr, usando lo stato di conversione contenuto in mbstate. La conversione continuerà per ogni carattere fino a quando non viene soddisfatta una delle seguenti condizioni:

  • Viene rilevato un carattere Null multibyte

  • Viene rilevato un carattere multibyte non valido

  • Il numero di caratteri wide archiviati nel buffer wcstr è uguale a count.

La stringa di destinazione wcstr termina sempre con Null, anche in caso di errore, a meno che wcstr non sia un puntatore Null.

Se count è il valore speciale _TRUNCATE, mbsrtowcs_s converte la porzione di stringa più ampia possibile che può essere inclusa nel buffer di destinazione, lasciando però dello spazio libero per un terminatore Null.

Se mbsrtowcs_s converte correttamente la stringa di origine, inserisce la dimensione in caratteri wide della stringa convertita e il terminatore Null in *pReturnValue, sempre che pReturnValue non sia un puntatore Null. Ciò si verifica anche quando l'argomento wcstr è un puntatore Null e permette di determinare le dimensioni del buffer richieste. Se wcstr è un puntatore Null, count viene ignorato.

Se wcstr non è un puntatore Null, all'oggetto puntatore a cui punta mbstr viene assegnato un puntatore Null se la conversione è stata arrestata in quanto è stato raggiunto un carattere di terminazione Null. In caso contrario, viene assegnato l'indirizzo subito dopo l'ultimo carattere multibyte convertito, se presente. Ciò consente a una chiamata di funzione successiva di riavviare la conversione nel punto in cui la chiamata è stata arrestata.

Se mbstate è un puntatore Null, viene usato l'oggetto statico dello stato di conversione mbstate_t della libreria interna. Poiché l'oggetto statico interno non è thread-safe, è consigliabile passare un valore mbstate fornito dall'utente.

Se mbsrtowcs_s rileva un carattere multibyte non valido nelle impostazioni locali correnti, inserisce -1 in *pReturnValue, imposta il buffer di destinazione wcstr su una stringa vuota, imposta errno su EILSEQ e restituisce EILSEQ.

Se le sequenze a cui punta mbstr e wcstr si sovrappongono, il comportamento di mbsrtowcs_s non è definito. mbsrtowcs_s viene influenzato dalla categoria LC_TYPE delle impostazioni locali correnti.

Nota sulla sicurezzaNota sulla sicurezza

Verificare che wcstr e mbstr non si sovrappongano e che count rispecchi correttamente il numero di caratteri multibyte da convertire.

La funzione mbsrtowcs_s differisce da mbstowcs_s, _mbstowcs_s_l per la possibilità di essere riavviata. 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 mbsrlen anziché mbslen se viene usata una chiamata successiva a mbsrtowcs_s anziché mbstowcs_s..

In C++ l'utilizzo di questa funzione è semplificato dagli overload dei modelli. Gli overload possono dedurre la lunghezza del buffer automaticamente (eliminando la necessità di specificare un argomento di dimensione) e possono sostituire automaticamente le funzioni precedenti e non sicure usando le controparti più recenti e sicure. Per altre informazioni, vedere Overload di modelli sicuri.

Eccezioni

La funzione mbsrtowcs_s è multithread-safe finché nessuna funzione nel thread corrente chiama setlocale, finché questa funzione è in esecuzione e l'argomento mbstate non è un puntatore Null.

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione C standard, usare PInvoke. Per altre informazioni, vedere Esempi di platform invoke.

Requisiti

Routine

Intestazione obbligatoria

mbsrtowcs_s

<wchar.h>

Vedere anche

Riferimenti

Conversione dei dati

Impostazioni locali

Interpretazione di sequenze di caratteri multibyte

mbrtowc

mbtowc, _mbtowc_l

mbstowcs_s, _mbstowcs_s_l

mbsinit