vale1411
Genius
1 min. di lettura
Vota

Concetti Chiave

  • La funzione scanf() in C, dichiarata in stdio.h, legge input dalla tastiera e lo assegna a variabili.
  • scanf() termina la lettura quando incontra uno spazio o EOF, eccetto nel caso del tipo %c.
  • Il buffer overflow è un rischio con scanf() se l'input supera la capacità del buffer.
  • Per gestire il buffer overflow, si può usare scanf_s specificando la lunghezza dell'input o aggiungere la direttiva _CRT_SECURE_NO_WARNINGS.
  • Per evitare letture errate dal buffer, si consiglia di svuotarlo tra le letture con getchar(), fflush()/fpurge(), o rewind(stdin).

Funzione scanf()

La funzione scanf() è una delle funzioni principali usate in C ed è dichiarata nel file header stdio.h.
Questa funzione legge la variabile messa come input dalla tastiera e la mette in una o più variabili.
È possibile inserire tutti i caratteri eccetto quelli di spaziatura, eccetto nel tipo %c.
scanf() termina quando viene digitato uno spazio o EOF.
Ci possono essere problemi di buffer overflow anche con scanf(), quando il dato supera le dimensioni di quella del buffer dove viene memorizzato, le cifre in eccedenza sovrascrivano altre variabili o causando un errore di segmentazione.
Questo problema si può risolvere:
- Aggiungendo la direttiva _CRT_SECURE_NO_WARNINGS
- Utilizzando scanf_s dove occore specificare la lunghezza dell’input
scanf_s ("%s", string ,10) ;
Immettendo i caratteri, questi vengono letti e memorizzati nel buffer (area di memoria) uno alla volta.

I caratteri vengono letti dal buffer senza svuotarlo perciò se ci sono letture successive del buffer possono esserci risultati inaspettati.
Per risolvere questo problema:
- Inserire nello scanf() anche caratteri di spazio o a capo che devono essere letti
- Svuotare il buffer tra le diverse letture con determinate funzioni: getchar(), fflush()/fpurge(), rewind(stdin).
- Usare la direttiva #define FFLUSH while ( getchar () != '\n');

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community