Ich habe ein Problem mit der Programmierung in C, insbesondere mit fopen in Visual Studio. Ich habe über die Funktion fopen_s
gelesen und meinem Projekt die folgende Zeile hinzugefügt, funktioniert aber immer noch nicht.
Also habe ich versucht, fopen_s
auf diese Weise zu verwenden:
Es stürzt immer noch ab. Was ist los?
Sie verwenden fclose
mit einem ungültigen fp
-Wert, selbst wenn das Öffnen fehlgeschlagen ist. Fügen Sie {}
mindestens um den Zweig else
hinzu.
Viele Entwickler denken, dass es generell eine gute Idee ist, geschweifte Klammern überall zu verwenden, sogar mit einer Anweisung in ihnen. Es ist so einfach, einen Fehler zu machen, wenn Sie das nicht tun, selbst für erfahrene Entwickler. Also lege sie auch um den dann Zweig.
Die _s
-Funktionen sind nicht portierbare Microsoft-Erfindungen, die größtenteils die Funktionalität duplizieren, die bereits unter einem tragbareren Namen existierte. Wenn man blind von der Nicht- _s
-Variante einer Funktion zur _s
-Variante wechselt, wird im Allgemeinen nicht etwas korrigiert. (Wenn Sie zum Beispiel eine Zeichenfolge stillschweigend abschneiden, ist weniger katastrophal als der Stack zu überlisten, aber es ist immer noch ein Fehlverhalten, das möglicherweise ausgenutzt werden kann.)
Ihr Problem - das nicht durch den Unterschied zwischen fopen
und fopen_s
beeinflusst wird - ist fast sicher, dass Sie sich nicht darum kümmern, nach Fehlern zu suchen. So prüfen Sie richtig auf Fehler :
Beachten Sie, dass die mit // HERE
markierte Zeile beide die genaue Zeichenfolge ausgibt, die an fopen
und das Ergebnis von strerror(errno)
übergeben wurde. Es ist unbedingt erforderlich, dass Sie die Argumente und strerror(errno)
immer dann drucken, wenn ein Systemaufruf fehlschlägt. (Hinweis: Wenn Sie eine der Funktionen _s
verwenden, die einen Fehlercode zurückgibt, anstatt errno
zu setzen, müssen Sie stattdessen den Rückgabewert an strerror
übergeben.)
Ändern Sie Ihr Programm, um dies zu tun, und Sie können herausfinden, warum es nicht funktioniert.
In Bezug auf den Modus, den Sie zum Öffnen verwenden,
%Vor%Ich habe nie den Buchstaben t als Parameter benutzt und weiß nicht, wofür das ist ...
Aber Sie öffnen mit R (lesen) und versuchen zu schreiben ...
Versuchen Sie
%Vor%oder
%Vor%Außerdem brauchst du die Variable err nicht wirklich. Wenn der fopen-Aufruf fehlschlägt, wird der Zeiger NULL sein.
Tags und Links c visual-c++ fopen