mbsrtowcs_s
Convertire una stringa di caratteri multibyte nelle impostazioni locali correnti in una rappresentazione di stringa di caratteri wide. Versione di con miglioramenti della mbsrtowcs
sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
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
pReturnValue
Numero di caratteri convertiti.
wcstr
Indirizzo del buffer in cui archiviare la stringa di caratteri wide convertita risultante.
sizeInWords
Dimensioni di wcstr
in parole (caratteri wide).
mbstr
Puntatore indiretto alla posizione della stringa di caratteri multibyte da convertire.
count
Numero massimo di caratteri wide da archiviare nel wcstr
buffer, non inclusi i valori Null di terminazione o _TRUNCATE
.
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 interno mbstate_t
non è thread-safe, è consigliabile passare sempre il proprio mbstate
parametro.
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 mbstr indirettamente 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, l'eccezione di parametro non valida viene richiamata come descritto in Convalida dei parametri . Se l'esecuzione può continuare, la funzione restituisce un codice errore e imposta errno
come indicato nella tabella.
Osservazioni:
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 acount
.
La stringa wcstr
di destinazione è sempre con terminazione Null, anche quando si verifica un errore, a meno che wcstr
non sia un puntatore Null.
Se count
è il valore _TRUNCATE
speciale , mbsrtowcs_s
converte la maggior parte della stringa che verrà inserita nel buffer di destinazione, lasciando comunque spazio per un carattere di terminazione Null.
Se mbsrtowcs_s
la stringa di origine viene convertita correttamente, inserisce le dimensioni in caratteri wide della stringa convertita e il carattere di terminazione Null in *pReturnValue
, purché pReturnValue
non sia un puntatore Null. La dimensione viene calcolata anche se l'argomento wcstr
è un puntatore Null, che consente di determinare le dimensioni del buffer necessarie. Se wcstr
è un puntatore Null, count
viene ignorato.
Se wcstr
non è un puntatore Null, all'oggetto puntatore a cui mbstr
punta viene assegnato un puntatore Null se la conversione è stata arrestata perché è stato raggiunto un carattere Null di terminazione. In caso contrario, all'indirizzo viene assegnato solo oltre l'ultimo carattere multibyte convertito, se presente. Consente a una chiamata di funzione successiva di riavviare la conversione 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é questo oggetto statico interno non è thread-safe, è consigliabile passare il proprio mbstate
valore.
Se mbsrtowcs_s
rileva un carattere multibyte non valido nelle impostazioni locali correnti, inserisce -1 in *pReturnValue
, imposta il buffer wcstr
di destinazione 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
è interessato dalla LC_TYPE
categoria delle impostazioni locali correnti.
Importante
Verificare che wcstr
e mbstr
non si sovrappongano e che count
rispecchi correttamente il numero di caratteri multibyte da convertire.
La mbsrtowcs_s
funzione differisce da mbstowcs_s
, _mbstowcs_s_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 mbsrlen
invece di mbslen
, se viene usata una chiamata successiva a mbsrtowcs_s
anziché mbstowcs_s
.
In C++, l'uso di questa funzione è semplificato dagli overload dei modelli; gli overload possono dedurre automaticamente la lunghezza del buffer (eliminando il requisito di specificare un argomento di dimensione) e possono sostituire automaticamente le funzioni meno recenti e non sicure usando le controparti più recenti e sicure. 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 mbsrtowcs_s
funzione è multithread safe se nessuna funzione nel thread corrente chiama setlocale
finché questa funzione è in esecuzione e l'argomento mbstate
non è un puntatore Null.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
mbsrtowcs_s |
<wchar.h> |
Vedi anche
Conversione dati
impostazioni locali
Interpretazione di sequenze di caratteri multibyte
mbrtowc
mbtowc
, _mbtowc_l
mbstowcs_s
, _mbstowcs_s_l
mbsinit