vscanf_s
, vwscanf_s
Legge i dati formattati dal flusso di input standard. Queste versioni di hanno vwscanf
miglioramenti pervscanf
la sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
int vscanf_s(
const char *format,
va_list arglist
);
int vwscanf_s(
const wchar_t *format,
va_list arglist
);
Parametri
format
Stringa di formato controllo.
arglist
Elenco di argomenti variabili.
Valore restituito
Restituisce il numero di campi convertiti e assegnati correttamente; Il valore restituito non include campi letti ma non assegnati. Un valore restituito pari a 0 indica che nessun campo è stato assegnato. Il valore restituito èEOF
per un errore o se viene rilevato il carattere di fine del file o il carattere di fine della stringa durante il primo tentativo di leggere un carattere. Se format
è un NULL
puntatore, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, vscanf_s
e vwscanf_s
restituiscono EOF
e impostano errno
su EINVAL
.
Per informazioni su questi e altri codici di errore, vedere errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Osservazioni:
La funzione vscanf_s
legge i dati dal flusso di input standard stdin
e scrive i dati nelle posizioni specificate dall'elenco di argomenti arglist
. Ogni argomento nell'elenco deve essere un puntatore a una variabile di un tipo corrispondente a un identificatore di tipo in format
. Se la copia avviene tra stringhe che si sovrappongono, il comportamento non è definito.
vwscanf_s
è una versione a caratteri wide di vscanf_s
; l'argomento format
in vwscanf_s
è una stringa di caratteri wide. vwscanf_s
e vscanf_s
si comportano in modo analogo, se il flusso viene aperto in modalità ANSI. vscanf_s
non supporta l'input da un flusso UNICODE.
Diversamente da e , e richiedono che le dimensioni del buffer vengano specificate per tutti i parametri di input di tipo c, C, s, S o set di controlli stringa racchiusi in [].vwscanf_s
vscanf_s
vwscanf
vscanf
Le dimensioni del buffer in caratteri vengono passate come un altro parametro immediatamente dopo il puntatore al buffer o alla variabile. Le dimensioni del buffer in caratteri per una wchar_t
stringa non corrispondono alle dimensioni in byte.
La dimensione del buffer include il carattere di terminazione null. È possibile usare un campo di specifica della larghezza per assicurarsi che il token che viene letto possa essere inserito nel buffer. Se non viene usato alcun campo di specifica della larghezza e il token letto in è troppo grande per adattarsi al buffer, non viene scritto nulla in tale buffer.
Nota
Il size
parametro è di tipo unsigned
, non size_t
.
Per altre informazioni, vedere Specifica della larghezza per scanf.
Mapping di routine di testo generico
Routine TCHAR.H | _UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_vtscanf_s |
vscanf_s |
vscanf_s |
vwscanf_s |
Per altre informazioni, vedere Formattare i campi delle specifiche: scanf
e wscanf
le funzioni.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
vscanf_s |
<stdio.h> |
wscanf_s |
<stdio.h> o <wchar.h> |
La console non è supportata nelle app piattaforma UWP (Universal Windows Platform) (UWP). Gli handle di flusso standard associati alla console, stdin
, stdout
e stderr
devono essere reindirizzati prima che le funzioni di runtime C possano usarle nelle app UWP. Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// crt_vscanf_s.c
// compile with: /W3
// This program uses the vscanf_s and vwscanf_s functions
// to read formatted input.
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
int call_vscanf_s(char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vscanf_s(format, arglist);
va_end(arglist);
return result;
}
int call_vwscanf_s(wchar_t *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vwscanf_s(format, arglist);
va_end(arglist);
return result;
}
int main( void )
{
int i, result;
float fp;
char c, s[81];
wchar_t wc, ws[81];
result = call_vscanf_s("%d %f %c %C %s %S", &i, &fp, &c, 1,
&wc, 1, s, _countof(s), ws, _countof(ws) );
printf( "The number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
result = call_vwscanf_s(L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,
&wc, 1, s, _countof(s), ws, _countof(ws) );
wprintf( L"The number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}
Quando questo programma riceve l'input nell'esempio, produce l'output seguente:
71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters
Vedi anche
Supporto matematico e a virgola mobile
I/O di flusso
impostazioni locali
printf
, _printf_l
, wprintf
_wprintf_l
scanf
, _scanf_l
, wscanf
_wscanf_l
scanf_s
, _scanf_s_l
, wscanf_s
_wscanf_s_l
vscanf
, vwscanf