Ich versuche, einen Bericht in einer TXT-Datei zu erstellen, aber wenn mein fprintf
einen \n
trifft, stürzt es ab. Dies ist mein Code zum Öffnen der Datei und zum Absturz:fprintf stürzt mein Programm ab, wenn es n trifft
Antwort
Das Problem ist, dass Sie nicht überprüft haben, ob die Datei geöffnet ist. Wenn es fehlschlägt, gibt es NULL zurück und das wird schlechte Dinge an fprintf
machen.
Ihre erste fprintf(f, "");
ist ein No-Op. Drucken einer leeren Zeichenfolge tut nichts, so dass "funktioniert" (obwohl ich bezweifle, dass das garantiert ist). printf("3");
funktioniert stdout und ist nicht betroffen von der fehlgeschlagenen fopen
. fprintf(f, "TEXT TO INPUT\n")
schließlich versucht, auf NULL und kotzen zu drucken.
Alle Systemaufrufe müssen überprüft werden. Sie haben alle unterschiedliche Rückgabewerte im Fehlerfall. fopen
gibt NULL zurück und der Fehler liegt in errno
. Es gibt viele Möglichkeiten, fopen
Fehlerbehandlung zu tun, hier ist eine, die ich mag, die dem Benutzer Informationen gibt, um das Problem zu debuggen.
#include <string.h> // for strerror()
#include <errno.h> // for errno
#include <stdio.h>
#include <stdlib.h>
int main(){
// Put the filename in a variable so it can be used in the
// error message without needing to be copied.
char file[] = "estructuras.txt";
FILE *fp = fopen(file, "w");
if(fp == NULL) {
// Display the filename, what you were doing with it, and why it wouldn't open.
fprintf(stderr, "Could not open '%s' for writing: %s\n", file, strerror(errno));
exit(-1);
}
}
strerror(errno)
schaltet den numerischen errno
Fehlercode in einen Menschen lesbaren String. Es gibt Anführungszeichen um den Dateinamen für den Fall, dass zusätzliche Leerzeichen eingefügt werden.
So erhalten Sie einen Fehler wie Could not open 'estructuras.txt': No such file or directory
.
ist das "Drucken auf NULL" Verhalten garantiert? weil unter Windows das Programm nicht abstürzt. Ich fand diesen Link: http://computer-programming-forum.com/47-c-language/3b3b0abba003f0d6.htm. Sounds undefiniertes Verhalten/Implementierung definiert. –
@ Jean-FrançoisFabre [MSVC man page für 'fprintf'] (https://msdn.microsoft.com/en-us/library/xkh07fe2.aspx) sagt *" Wenn 'stream' oder' format' '' NULL' 'ist Diese Funktionen rufen den ungültigen Parameterhandler auf, wie in [Parameterüberprüfung] beschrieben. Wenn die Ausführung fortgesetzt werden kann, geben die Funktionen "-1" zurück und setzen "errno" auf "EINVAL". "* –
@ Jean-FrançoisFabre I ' Ich gehe davon aus, dass es Undefined Behavior ist. Ein kurzer Überfliegen der C99-Spezifikationen stdio.h und fprintf sagt nichts über Nullzeiger aus. Am nächsten sehe ich: * Die Funktion fprintf gibt die Anzahl der übertragenen Zeichen zurück oder einen negativen Wert, wenn ein Ausgabe- oder Codierungsfehler aufgetreten ist *, so dass ein negativer Wert zurückgegeben werden kann, aber clang entscheidet sich für segfault. Hinweis: Diese Antwort zieht nur das beobachtete Verhalten auseinander. – Schwern
- 1. Mein C-Programm stürzt ab
- 2. SwapBuffers stürzt mein Programm ab!
- 3. Mein Programm stürzt ab, wenn ich mein Telefon rotiere
- 4. Warum stürzt mein kleines Programm ab?
- 5. Mein OpenGL-Bitmap-Programm stürzt ab?
- 6. Programm stürzt ab
- 7. Warum stürzt mein einfaches Pthreads-Programm mit einem Segmentierungsfehler ab?
- 8. Programm stürzt ab, wenn LinkedList gedruckt wird
- 9. Einfaches Programm stürzt ab
- 10. mein Array stürzt ab
- 11. Programm stürzt ab, wenn malloc ausgeführt
- 12. C rekursive Programm stürzt ab
- 13. Mein Programm stürzt beim Vergleichen von Elementen im Array ab
- 14. Warum stürzt ein großes lokales Array mein Programm ab?
- 15. SharpSVN Beispiel Programm stürzt ab
- 16. Warum stürzt mein Programm bei der Return-Anweisung ab?
- 17. Warum stürzt mein Programm bei dieser einen Zeile ab?
- 18. Warum stürzt das Programm ab?
- 19. Dieses Programm stürzt ab, warum?
- 20. Programm stürzt ab, wenn ich versuche, Werte einzugeben
- 21. Mein Code läuft gut, wenn ich es debugge, aber stürzt ab, sobald ich es laufe
- 22. Pygame stürzt ab, wenn ich es öffne
- 23. Anfänger Programm stürzt immer wieder ab
- 24. Programm stürzt nach String-Eingang ab
- 25. cfquery stürzt ab, wenn es Tsql Kommentare
- 26. Linked-List-Programm stürzt ab, wenn Knoten zu zerstören
- 27. C - Programm stürzt ab, wenn ich die kostenlose Funktion
- 28. Programm stürzt ab, wenn Inhalt des Zeigers abgerufen werden soll
- 29. OpenGL Superbible erstes Programm stürzt ab
- 30. Python-Programm stürzt ab, wenn ich ein Verhältnis bin Berechnung
Sie können den Wert von 'f' nicht überprüfen, zum Beispiel' if (f == NULL) {exit (1); } ' –
Das ist kein komplettes Programm. Bitte zeigen Sie uns einen [mcve]. –
funktioniert für mich auf Windows, auch wenn die Datei nicht erstellt werden kann. Hast du es mit einem Debugger versucht –