Von The GNU C Programming Tutorial:Warum ist die fgets-Funktion veraltet?
Die
fgets
("file get string") Funktion ist ähnlich der Funktion wird . Diese Funktion ist veraltet - das bedeutet, es ist veraltet und es wird dringend empfohlen, dass Sie es nicht verwenden - weil es gefährlich ist. Es ist gefährlich, denn wenn die Eingabedaten ein null Zeichen enthalten, können Sie nicht sagen. Verwenden Sie nichtfgets
, wenn Sie nicht wissen, dass die Daten keine Null enthalten können. Verwenden Sie es nicht zum Lesen von Dateien, die vom Benutzer bearbeitet wurden. Wenn der Benutzer ein Nullzeichen einfügt, sollten Sie entweder richtig behandeln oder eine klare Fehlermeldung ausgeben. Verwenden Sie immergetline
odergetdelim
anstelle vonfgets
, wenn Sie können.
Ich dachte, die fgets
Funktion stoppt, wenn es sich um eine \0
oder \n
begegnet; Warum schlägt diese Handbuchseite vor, dass ein Nullbyte "gefährlich" ist, wenn fgets
die Eingabe richtig handhaben sollte? Was ist der Unterschied zwischen getline
und fgets
, und ist die fgets
Funktion wirklich veraltet in der C99 oder zukünftige C-Normen?
Also 'Fgets' liest weiter nach Null Bytes, Suche nur nach dem Newline-Zeichen? –
@VilhelmGray: Das ist richtig, und es wird Ihnen nicht sagen, dass es getan hat. Es gibt keine Möglichkeit, sicher zu sein, dass das erste '\ 0', das Sie finden, von 'fgets' hinzugefügt wurde oder nicht. –
Nullbytes gehören nicht in ** text ** -Dateien.'fgets()' wurde entwickelt, um mit Textdateien zu arbeiten: die Verwendung von 'fgets()' mit Dateien von Binärdaten wird nicht empfohlen. – pmg