Verwendung von fopen_s in C

8

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.

%Vor%

Also habe ich versucht, fopen_s auf diese Weise zu verwenden:

%Vor%

Es stürzt immer noch ab. Was ist los?

    
nikodamn 09.06.2014, 19:03
quelle

5 Antworten

8

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.

    
hyde 09.06.2014, 19:07
quelle
4

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 :

%Vor%

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.

    
zwol 09.06.2014 19:13
quelle
1

Unter Windows sind die Schrägstriche anders als unter Linux. Daher sollten Sie C: \ Datei.txt statt C: /File.txt verwenden.

    
binit92 06.05.2016 16:49
quelle
0

// Versuch es, es funktioniert.

%Vor%     
Achamyeleh Dagnaw 21.02.2018 09:39
quelle
-2

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.

    
vmp 09.06.2014 23:32
quelle

Tags und Links