Condividi tramite


scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

Dati formattati letti dal flusso di input standard.Queste sono versioni di scanf, _scanf_l, wscanf, _wscanf_l con i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in CRT.

int scanf_s(
   const char *format [,
   argument]... 
);
int _scanf_s_l(
   const char *format,
   locale_t locale [,
   argument]... 
);
int wscanf_s(
   const wchar_t *format [,
   argument]... 
);
int _wscanf_s_l(
   const wchar_t *format,
   locale_t locale [,
   argument]... 
);

Parametri

  • format
    Stringa del controllo di formato.

  • argument
    Argomenti facoltativi.

  • locale
    Le impostazioni locali da utilizzare.

Valore restituito

Restituisce il numero di campi convertiti correttamente e assegnati; il valore restituito non include campi che sono stati letti ma non assegnato.Un valore restituito pari a 0 indica che nessun campo è stato assegnato.Il valore restituito è EOFper un errore o se il carattere di fine file o il carattere di fine della stringa viene rilevato il primo tentativo di leggere un carattere.Se format è un puntatore di NULL, il gestore non valido di parametro viene richiamato, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, scanf_s e wscanf_s restituiscono EOF e errno stabilito a EINVAL.

Per ulteriori informazioni su questi, e altri, codici di errore vedere _doserrno, errno, _sys_errlist, and _sys_nerr .

Note

La funzione di scanf_slegge i dati dal flusso di input standard stdine scrive i dati nella posizione specificata da argument.Ogni argument deve essere un puntatore a una variabile di un tipo che corrisponde a un identificatore del tipo in format.Se copiare è compresa tra stringhe che si sovrappongono, il comportamento è definito.

wscanf_sè una versione a caratteri estesi di scanf_s; l'argomento di format a wscanf_sè una stringa di caratteri estesi.wscanf_se scanf_ssi comportano in modo identico se il flusso viene aperto in modalità ANSI.scanf_s non supporta attualmente l'input da un flusso di UNICODE.

Le versioni di queste funzioni con il suffisso _l sono identiche ad eccezione che utilizzano il parametro delle impostazioni locali passato in ingresso invece di utilizzare quelle del thread corrente.

A differenza di scanfe di wscanf, scanf_se wscanf_srichiedono la dimensione del buffer di essere specificati per tutti i parametri di input di tipo c, C, s, S, o [.Le dimensioni del buffer i caratteri vengono passati come parametro aggiuntivo immediatamente dopo il puntatore il buffer o nella variabile.Ad esempio, se leggere una stringa, le dimensioni del buffer per tale stringa vengono passate come segue:

char s[10];

scanf_s("%9s", s, _countof(s)); // buffer size is 10, width specification is 9

Le dimensioni del buffer comprendono di terminazione null.Un campo di specifica della larghezza può essere utilizzato per assicurarsi che il token letta in inserito nel buffer.Se nessun campo della specifica di larghezza viene utilizzato e il token lettura è troppo grande per adattarlo al buffer, non verrà scritto a tale buffer.

[!NOTA]

Dimensione del parametro è di tipo unsigned, non size_t.

Nell'esempio che segue il parametro di dimensione del buffer indica il numero massimo di caratteri, non byte.Nella chiamata a wscanf_s, la larghezza del carattere indicata dal tipo di buffer non corrisponde alla larghezza del carattere che non sia visualizzata dall'identificatore di formato.

wchar_t ws[10];
wscanf_s("%9S", ws, _countof(ws));

L'identificatore di formato di S indica l'utilizzo della larghezza di caratteri che è "opposto a" larghezza predefinita supportata dalla funzione.La larghezza del carattere a byte singolo, ma i caratteri DBCS supportate di funzione.In questo esempio vengono letti in una serie di fino a 9 singolo-byte- caratteri estesi e li inserisce in un doppio byte un buffer di caratteri.I caratteri vengono trattati come valori a byte singolo, i primi due caratteri vengono archiviati in ws[0], i due secondi vengono archiviati in ws[1], e così via.

Nel caso dei caratteri, si può leggere un singolo carattere come segue:

char c;

scanf_s("%c", &c, 1);

In leggere più caratteri per le stringhe terminate non Null, Integer vengono utilizzati come la specifica di larghezza e le dimensioni del buffer.

char c[4];

scanf_s("%4c", &c, _countof(c)); // not null terminated

Per ulteriori informazioni, vedere specifica la larghezza di scanf.

Mapping di routine a Testo generico

TCHAR.H routine

_UNICODE & _MBCS non definiti

_MBCS definito

_UNICODE definito

_tscanf_s

scanf_s

scanf_s

wscanf_s

_tscanf_s_l

_scanf_s_l

_scanf_s_l

_wscanf_s_l

Per ulteriori informazioni, vedere La specifica di formato sistema — funzioni di scanf e funzioni di wscanf.

Requisiti

Routine

Intestazione obbligatoria

scanf_s, _scanf_s_l

<stdio.h>

wscanf_s, _wscanf_s_l

<stdio.h> o <wchar.h>

La console non è supportata nelle applicazioni di Windows Store.L'handle standard del flusso associate alla console, stdin, stdoute stderr, devono essere reindirizzati prima di funzioni di runtime del linguaggio C possono essere utilizzate nelle applicazioni di Windows Store.Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'introduzione.

Esempio

// crt_scanf_s.c
// This program uses the scanf_s and wscanf_s functions
// to read formatted input.
  
#include <stdio.h>
#include <stdlib.h>

int main( void )
{
   int      i,
            result;
   float    fp;
   char     c,
            s[80];
   wchar_t  wc,
            ws[80];

   result = scanf_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 = wscanf_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);
}
  

Equivalente .NET Framework

Vedere anche

Riferimenti

Supporto per le operazioni in virgola mobile

Flusso I/O

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