Condividi tramite


vscanf, vwscanf

Legge i dati formattati dal flusso di input standard. Sono disponibili versioni più sicure di queste funzioni; vedere vscanf_s, vwscanf_s.

Sintassi

int vscanf(
   const char *format,
   va_list arglist
);
int vwscanf(
   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 che vengono 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.

Se format è un NULL puntatore, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono EOF e impostano errno su EINVAL.

Per informazioni su questi e altri codici di errore, vedere errno, _doserrno, _sys_errliste _sys_nerr.

Osservazioni:

La funzione vscanf 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.

Importante

Quando si usa vscanf per leggere una stringa, specificare sempre una larghezza per il formato %s , ad esempio "%32s" anziché "%s". In caso contrario, l'input formattato in modo non corretto può causare un sovraccarico del buffer. In alternativa, è possibile usare vscanf_so vwscanf_s fgets.

vwscanf è una versione a caratteri wide di vscanf; l'argomento format in vwscanf è una stringa di caratteri wide. vwscanf e vscanf si comportano in modo analogo, se il flusso viene aperto in modalità ANSI. vscanf non supporta l'input da un flusso UNICODE.

Mapping di routine di testo generico

Routine TCHAR.H _UNICODE e _MBCS non definito _MBCS definito _UNICODE definito
_vtscanf vscanf vscanf vwscanf

Per altre informazioni, vedere Formattare i campi delle specifiche: scanf e wscanf le funzioni.

Requisiti

Ciclo Intestazione obbligatoria
vscanf <stdio.h>
vwscanf <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, stdoute stderrdevono 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.c
// compile with: /W3
// This program uses the vscanf and vwscanf functions
// to read formatted input.

#include <stdio.h>
#include <stdarg.h>

int call_vscanf(char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vscanf(format, arglist);
    va_end(arglist);
    return result;
}

int call_vwscanf(wchar_t *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vwscanf(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( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, 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( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, 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);
}

      71 98.6 h z Byte characters
36 92.3 y n Wide charactersThe 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
fscanf, _fscanf_l, fwscanf_fwscanf_l
printf, _printf_l, wprintf_wprintf_l
sprintf, _sprintf_l, swprintf, _swprintf_l__swprintf_l
sscanf, _sscanf_l, swscanf_swscanf_l
vscanf_s, vwscanf_s