fopen fscanf sind unsafe?
-
Mein Compiler ist der Meinung, dass die beiden Funktionen nicht sicher sind, und dass ich z.B. fopen_s statt fopen verwenden sollte.
Wieso sind diese beiden Funktionen unsicher, die gab es doch eigentlich schon immer? Man liest von Pufferüberläufen, die fscanf() so gefährlich machen sollen. (Andererseits kann man doch durch die Angabe einer Feldbreite fscanf() dazu zwingen, nicht mehr Zeichen zu lesen, als in den Puffer hineinpassen ? Das Problem mit dem fscanf() Pufferüberlauf liegt doch nicht an der Funktion sondern doch eher daran, dass der Programmierer dem nicht vorbeugt _ obwohl es möglich wäre ? Noch unerklärlicher ist mir, was denn an fopen() gefährlich sein sollte ??? fopen_s scheint ja nicht einmal eine offizielle Standard-C-Funktion zu sein, deshalb erscheint mir die Warnung meines Compilers sehr verdächtig. Ist das nur eine Eigenart des VC Compilers, dass er vor den beiden Funktionen warnt, oder tun das Eure C-Compiler (von anderen Herstellern) auch .
Soll ich die Warnungen des Compilers in diesem Fall ignorieren (weil sie mir ziemlich mysteriös und grundlos erscheinen!)? Normaler Weise ist das eine sehr schlechte Unart, wenn man die Compiler-Warnungen ignoriert (nach dem Motto, solange es keine Fehler sind ...), die man sich ja nicht angewöhnen sollte - meint jedenfalls mein Büchlein.
Wie sind Eure Erfahrungen mit der Unsicherheit von fopen() und fscanf()?
-
^^microsoft übertreibt's manchmal ein bisschen. mach' in die erste zeile deines programms (noch bevor irgendwas #includiert wird):
#define CRT_SECURE_NO_WARNINGS
dann wirst du davon nicht mehr belästigt.