fgets() - bessere Alternative ?
-
Hi, also ich verwende fgets() und sscanf() als alternative für scanf() und fflush().
z.b. so :
char Buffer[2]; int Nummer=0; fgets(Buffer,2,stdin); sscanf(Buffer,"%d",&Nummer); printf("%d",Nummer);
Irgendwie ist das ziemlich viel Code für die Eingabe einer Zahl und sieht auch irgendwie nicht schön aus. Wollte mal fragen obs ihr noch bessere alternativen kennt, die keinen BufferOverflow erzeugen.
-
Wieso sieht doch gut aus. Und warum packst du das ganze nicht in eine Funktion? Dann hast du nur noch eine Zeile fürs Einlesen einer Zahl.
schirrmie
-
Ahjo stimmt schon, dachte halt nur vll kennt einer was besseres
-
es gibt noch 'fscanf'.
--> http://www.cplusplus.com/reference/clibrary/cstdio/fscanf.html
-
FILE*-fan schrieb:
es gibt noch 'fscanf'.
aber dann braucht man wieder diese dumme eingabepuffer-leermachen schleife
-
toxor schrieb:
Irgendwie ist das ziemlich viel Code für die Eingabe einer Zahl
viel Code? Das sind 2 Zeilen!
toxor schrieb:
und sieht auch irgendwie nicht schön aus.
der Code muss vor allem eins sein: richtig und sicher. Da spielt keine Rolle, wie "hübsch" oder "häßlich" ist (was man sowieso nicht definieren kann).
scanf-Funktionen sind dafür da, dass man mit einem Aufruf das Einlesen und Parsen erledigen kann, weil sie selber parsen. Das Problem mit scanf* ist, dass diese Funktionen sich nicht immer so verhalten, wie man sie erwartet.
Außerdem: um auf Interaktion des Benutzers zu reagieren, muss man immer folgendes machen:
- Eingabe lesen in Puffer line
- Den Puffer line parsen
Das sind also 2 Schritte, genauso wie der Code da oben. Eine "bessere" Alternativ gibt es imho nicht.
-
alles klar, vielen Dank für die Antworten
-
Den Benutzern des GNU-gcc Compilers sei noch die Funktion getline() ans Herz gelegt.
-
Wenn man es richtig macht, wird es sogar noch wesentlich mehr Code. Abfragen von Userinput auf Gültigkeit, Plausibilität, Sicherheit etc. ist ein verdammter Aufwand. Aber auch das ist nicht schlimm, das kann man schön verpacken und Rechenzeit spielt da ja praktisch keine Rolle. Man wartet ja eh die meiste Zeit auf den User