Warum funktioniert fopen ohne den zurückgegebenen Zeiger zu speichern?

8

Ich habe ein kleines Programm geschrieben, um eine OTP verschlüsselte Datei zu entschlüsseln. Das funktioniert gut.

Aber ich habe bemerkt, dass ich vergessen habe, den zurückgegebenen Dateizeiger beim Aufruf von fopen auf "Solution.jpg" zu speichern. Wie Sie sehen können, schreibe ich in den Dateizeiger f. Ich frage mich, warum dieser Code funktioniert.

%Vor%     
johnson262 17.02.2016, 10:54
quelle

1 Antwort

6

Ich habe gerade die Antwort mit gdb gefunden.

Da ich fclose() benutze, bevor ich die neue Datei öffne, wurde der Zeiger auf die zuvor verwendete Datei freigegeben. Dieser Zeiger könnte wieder verwendet werden und fopen() gab diesen Zeiger jedes Mal zurück, wenn ich dieses Programm ausführte.

Es hat also funktioniert, nur weil zu dem Zeitpunkt, als ich fopen() aufgerufen habe, keine andere Datei geöffnet war.

Dies ist undefiniertes Verhalten und kann zu anderen Problemen führen. Es sollte unter allen Umständen vermieden werden (ich habe es aus Versehen gemacht). Ich wollte nur verstehen, warum das funktioniert und meinen Code repariert haben.

    
johnson262 17.02.2016, 11:01
quelle

Tags und Links