scanf - Liest vom Standardinput.

Beschreibung

Definiert in stdio

int scanf(const char * format, ...);

Parameter

format
Formatstring der geparst wird, ähnlich zu printf

Rückgabewerte

Gibt die größe des gelesenen Strings in Bytes zurück.

Wissenswert

Größe der Eingaben immer begrenzen!

char input[9];
 
# DON'T:
scanf("%s", &input);
 
# DO:
scanf("%8s", &input);

Buffer und Buffer leeren

Liest scanf weniger Zeichen als im Buffer anstehen, bleiben die restlichen Zeichen im Buffer und werden erst beim nächsten lesen (z.B. durch scanf) abgeholt. Als Lösung kann der Buffer geleert werden:

# Entweder mit fflush
# Funktioniert aber nicht bei jedem Betriebssystem
fflush(stdin);
 
# Oder buffer manuell leeren:
while(getchar() != '\n');

Probleme mit scanf

  • Es findet keine Überprüfung der Eingabe statt.
  • Wenn nicht genug Speicher reserviert wurde, wird einfach der darauffolgende Speicher überschrieben.
  • Benutzereingaben können gefährliche Sicherheitslücken provozieren
  • Immer die Eingaben begrenzen und validieren!