Funzioni di libreria integrate per l'input dell'utente | sscanf, scanf_s, fscanf_s, sscanf_s
Il linguaggio di programmazione C fornisce varie funzioni di libreria integrate per l'input dell'utente. In questo articolo impareremo a conoscere sscanf scanf_s fscanf_s sscanf_s Funzioni di libreria in C.
1. Funzione sscanf() in C
sscanf() viene utilizzato per leggere l'input formattato dalla stringa. Entrambe le funzioni scanf() e sscanf() sono simili, l'unica differenza tra loro è che la funzione scanf() legge l'input dell'utente dall'input standard come una tastiera e la funzione sscanf() legge l'input da una stringa e memorizza l'input in un'altra stringa.
Sintassi
int sscanf ( const char * str const char * format ...);
Parametri
- In caso di successo la funzione restituisce il numero di valori letti con successo.
- Nel caso di un errore di input prima che i dati possano essere letti con successo, viene restituito EOF.
- In caso di successo la funzione restituisce il numero di valori letti.
- Nel caso di un errore di input prima che i dati possano essere letti con successo, viene restituito EOF.
- Se la dimensione del buffer è uguale o inferiore alla dimensione dell'array, l'immissione di una dimensione maggiore o uguale alla dimensione del buffer porterà alla perdita di dati poiché i dati in eccesso verranno troncati e verranno letti i dati fino alla dimensione del buffer - 1.
- Se la dimensione del buffer è maggiore della dimensione di un array, allora
- l'immissione di dimensioni inferiori alla dimensione del buffer funzionerà ma genererà un errore
- l'immissione di dimensioni maggiori della dimensione del buffer porterà all'overflow del buffer e genererà lo stesso errore.
- In caso di successo la funzione restituisce il numero di valori letti con successo.
- Nel caso di un errore di input prima che i dati possano essere letti con successo, viene restituito EOF.
- In caso di successo la funzione restituisce il numero di valori letti con successo.
- Nel caso di un errore di input prima che i dati possano essere letti con successo, viene restituito EOF.
Valore restituito
Nota : Dovrebbero esserci almeno tanti argomenti quanti sono i valori memorizzati dagli identificatori di formato.
Esempio: programma C per illustrare la funzione sscanf
C // C program to illustrate sscanf statement #include int main () { // declaring array s char s [] = '3 red balls 2 blue balls' ; char str [ 10 ] str2 [ 10 ]; int i ; // %*s is used to skip a word sscanf ( s '%d %*s %*s %*s %s %s' & i str str2 ); printf ( '%d %s %s n ' i str str2 ); return 0 ; }
Produzione
3 blue balls
2. Funzione scanf_s() in C
Questa funzione è specifica dei compilatori Microsoft. È uguale a scanf tranne che non causa un sovraccarico del buffer. La funzione scanf_s() è più sicura della funzione scanf() poiché fornisce un parametro aggiuntivo per specificare la dimensione del buffer che può evitare l'overflow del buffer.
Sintassi
int scanf_s (const char *format [argument]...);
Parametri
Nota : Qui possiamo specificare la dimensione del buffer e controllare effettivamente il limite dell'input in modo che l'intera applicazione non si blocchi a causa di un overflow della memoria.
Valore restituito
Perché usare scanf_s()?
scanf legge semplicemente qualunque input venga fornito dalla console. C non controlla se l'input dell'utente si adatterà alla variabile che hai designato. Se hai un array chiamato color[3] e usi scanf per la stringa Red funzionerà correttamente, ma se l'utente inserisce più di 3 caratteri scanf inizia a scrivere nella memoria che non appartiene all'array color.
C non lo noterà né ti avviserà e potrebbe o meno bloccare il programma a seconda che qualcosa tenti di accedere e scrivere su quello slot di memoria che non appartiene all'array di colori. È qui che entra in gioco scanf_s. scanf_s controlla che l'input dell'utente si adatti allo spazio di memoria specificato.
Nota : scanf_s() funzionerà solo in Microsoft Visual Studio.
Esempio 1: programma C per illustrare la funzione sscanf_s
C // C program to illustrate sscanf_s statement // scanf_s() will only work in Microsoft Visual Studio. #include #include int main () { char a [ 5 ]; // sizeof(a) is buffer size scanf_s ( '%s' a sizeof ( a )); printf ( ' n %s ' a ); return 0 ; }
Ingresso 1
Red
Uscita 1
Red
Ingresso 2
Yellow
Uscita 2
No Output
Esempio 2: programma C per illustrare la relazione tra la dimensione del buffer e la dimensione dell'array.
C++ // C++ program // consumes the Enter key // (newline character) pressed after input #include int main () { // example char ch [ 100000 ]; printf ( 'Enter characters: ' ); scanf_s ( '%s' ch 99999 ); getchar (); return 0 ; }
C // C program // consumes the Enter key // (newline character) pressed after input #include int main () { char ch [ 100000 ]; printf ( 'Enter characters: ' ); scanf_s ( '%s' ch 99999 ); getchar (); return 0 ; }
3. Funzione fscanf_s() in C
La differenza tra fscanf() e fscanf_s() è la stessa di scanf() e scanf_s(). fscanf_s() è una funzione sicura che richiede che la dimensione di ciascun campo di tipo c C s S e [ ] venga passato come argomento immediatamente dopo la variabile.
Sintassi
int fscanf_s( FILE *stream const char *format [argument ]... );
Parametri
Nota : fscanf_s ha un parametro aggiuntivo per specificare la dimensione del buffer e controllare effettivamente il limite dell'input.
Valore restituito
Nota : fscanf_s funzionerà solo in MS Visual Studio.
Esempio: programma C per illustrare la funzione fscanf_s
C // C program to illustrate fscanf_s statement // This program will run on MS Visual studio #include #include int main () { char s1 [ 10 ] s2 [ 10 ] s3 [ 10 ]; int year ; // file pointer FILE * fp ; // Open file securely fopen_s ( & fp 'file.txt' 'w+' ); fputs ( 'Hello World its 2017' fp ); rewind ( fp ); // Using fscanf_s fscanf_s ( fp '%s' s1 sizeof ( s1 )); fscanf_s ( fp '%s' s2 sizeof ( s2 )); fscanf_s ( fp '%s' s3 sizeof ( s3 )); fscanf_s ( fp '%d' & year sizeof ( year )); printf ( 'String1 |%s| n ' s1 ); printf ( 'String2 |%s| n ' s2 ); printf ( 'String3 |%s| n ' s3 ); printf ( 'Integer |%d| n ' year ); fclose ( fp ); return ( 0 ); }
Produzione
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. Funzione sscanf_s() in C
sscanf_s() è una funzione sicura di sscanf() e le funzioni sicure richiedono che la dimensione di ciascun campo di tipo c C s S e [ venga passato come argomento immediatamente dopo la variabile.
Sintassi
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parametri
Nota : sscanf_s ha un parametro aggiuntivo per specificare la dimensione del buffer e controllare effettivamente il limite dell'input.
Valore restituito
Nota : sscanf_s() funzionerà solo in Microsoft Visual Studio.
Esempio: programma C per illustrare la funzione sscanf_s
C // C program to illustrate sscanf_s statement // This program will run on MS Visual studio #include int main () { char s [] = '3 red balls 2 blue balls' ; char str [ 10 ] str2 [ 10 ]; int i ; // %*s is used to skip a word sscanf_s ( s '%d' & i sizeof ( i )); sscanf_s ( s '%*d %*s %*s %*s %s' str sizeof ( str )); sscanf_s ( s '%*d %*s %*s %*s %*s %s' str2 sizeof ( str2 )); printf ( '%d %s %s n ' i str str2 ); return 0 ; }
Produzione
3 blue balls
Crea quiz