Warum "w" in fopen hier nicht eine neue Datei erstellen?
Das Programm am Ende immer verlassen. Scheine ich zu laufen um dieses problem Häufig und ich denke, dass ich irgendwie vorher fest aber ich bin mir nicht sicher, wie. Warum funktioniert es nicht eine Datei erstellen?
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main (void){
FILE *fp;
int c;
char file_w[100];
char string[100];
printf("Enter filename\n");
fgets(file_w, 100, stdin);
fp = fopen(file_w, "w");
if (fp == NULL){
printf("Can't open file\n");
exit(0);
}
printf("Enter a string");
fgets(string, 100, stdin);
for(c = 0; c <= sizeof(string); c++)
{
fprintf(fp, "%s\n", string);
}
printf("file written");
fclose(fp);
return 0;
}
Bitte aktualisieren Sie Ihre post oder eine Antwort, wenn Sie gefunden, was das problem war. BTW: wie war deine Prüfung? 🙂
InformationsquelleAutor the5thace | 2012-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, zu drucken, den Namen der Datei, die Sie eingegeben haben:
einfach nach der Zeile, die Sie erhalten file_w, nur um sicher zu sein, zu geben, was Sie wollen. Ich gleiche Fälle das terminal könnte falsch konfiguriert.
Versuchen, geben Sie einen absoluten Namen Pfad, wenn Ihr computer ist ein Linux oder Unix:
Wenn Ihr computer ist Windows... Auch versuchen, um zu sehen, ob C:\temp\ vorhanden ist (oder erstellen) und dann eingeben:
In jedem Fall, denken Sie daran, dass Sie können einen absoluten Pfad anzugeben, und nicht nur den Namen der Datei. So überprüfen Sie, wenn Sie die Rechte (also die Rechte) zum schreiben in das Verzeichnis, wo die Datei geschrieben werden soll.
In Fall, dass Sie möchten, überprüfen die den Fehler und haben eine bessere Beschreibung des Problems versuchen, verwenden Sie die folgenden Zeilen ein, anstatt Ihren code nur unter der fopen
strerror es ist eine wunderbare Funktion, nur weil Sie wieder eine Beschreibung des Problems, anstatt einen Fehlercode.
Ich gehe in Büro innerhalb von 20'. Versuchen Sie dann zu drucken, die mit dem Namen der ersten. Werden Sie sicher, geben Sie nur reinen text, keine seltsamen Sonderzeichen wie ?*+
Ja, keine seltsame Zeichen, der name ist in Ordnung!
Nur um sicher zu sein... Hast du versucht, um die strerror Funktion, die ich vorgeschlagen, Sie?
Ich habe strreror zurückgegeben : invalid argument
InformationsquelleAutor freedev
Ich Wette, das problem der "unsichtbaren Charakter nach dem eigentlichen Namen von fgets()". Ich lasse Sie herausfinden, was genau das Zeichen ist, wo es herkommt und wie es zu lösen ist, wie "kämpfen, um ein problem zu lösen", ist Teil des Lernprozesses, wenn es um Programmierung geht. Wenn es leicht war, könnte jeder es tun.
Mach dir keine sorgen, du wirst es bekommen. Versuchen Sie den Druck (mit %d) jedes Zeichen in der Zeichenfolge, die den Dateinamen... (versuchen Sie mit einem kurzen Namen!)
Hmm, ich kann Dateien anlegen, deren Namen am Ende mit einem Zeilenumbruch einwandfrei. Ist das verboten auf Windows, oder was könnte das problem sein?
Ja, windows-nicht wie alle anderen whitespace als 0x20 (möglicherweise nbsp, 0xA0 als gut, habe noch nie versucht, und ich bin auf eine Linux Maschine. Ich habe das schon mal gesehen.
InformationsquelleAutor Mats Petersson
Wenn der return-Wert von
fopen
ist NULL, es bedeutet, dass einige Fehler aufgetreten sind. Ich schlage vor, Sie schauen in dieerrno
global zu sehen, welcher Fehler aufgetreten ist, zu helfen, Sie Debuggen, warum es nicht die Datei öffnen.Den
w
Flagge führt Folgendes aus:Also sollte es eine Datei erstellen, wenn noch keiner vorhanden ist, oder wenn es existiert, überschreiben Sie seinen Inhalt.
Wenn Sie es nicht tun, müssen Sie ein anderes problem, aber aus den wenigen Informationen, die Sie gegeben haben, ist es schwer zu sagen, was es ist.
Haben Sie die korrekten lese - /Schreibrechte?
Sollte. Admin-Konto. Hatte ein ähnliches Programm arbeiten, bevor die hand!
So haben Sie es durchgestanden mit einem debugger, und sah, was passiert? Überprüfen Sie auch den Inhalt
errno
als ich vorgeschlagen.InformationsquelleAutor Tony The Lion