Probleme mit Filepointer und fprintf
-
Ich versuche gerade, aus diversen Daten eine (bzw. mehrere) Textdatei zu erstellen. Es handelt sich dabei um eine längere while-Schleife, in der ab und an ein "fprintf" eingebettet ist. Vor jedem fprintf gibt es eine Kontrollfunktion, die Strings auf Fehler prüft.
Mein Problem ist nun, dass die Erstellung der Datei einfach irgendwann stoppt (sogar immer an der gleichen Stelle, bei ca. 50%). Dank der Kontrollfunktion weiß ich, dass das Programm ganz normal weiterläuft, meine Strings korrekt kontrolliert...nur irgendwie werden beim Weiterlaufen genau die fprintf-Befehle nicht mehr abgearbeitet, die in eine der Dateien schreiben sollen. Es wird parallel eine andere Datei erzeugt, mit der alles in Ordnung ist.Hat jemand eine Idee, wo das Problem liegen könnte? Der String, bei dem die Dateierstellung aufhört, ist leider auch um einiges einfacher gestrickt, als viele seiner biestigen Brüder - ich habe daher keine Ahnung, warum das Programm sich gerade dort entscheidet, alle fprintf's in diese Ausgabedatei zu ignorieren. Kann ein Filepointer abstürzen? Oder verträgt er vielleicht nur 50000 Schritte, bis er das zeitliche segnet?
Ich würde auch ein Quellcode-Beispiel liefern, aber dazu ist der Code zu komplex. Ich müsste dann alle Funktionen mit auflisten, da ich das Problem bisher nicht eingrenzen kann.
EDIT:
Ich habe gerade verzweifelt eine Zeile eingefügt und die Ausgabe lief bis zum Ende durch. Allerdings verstehe ich nicht, wieso.
searchbuffer2[0] = '\0'; //Die Zeile ist neu for(i = 1 ; '<' != fgetc(input) ; i++); fseek(input , -1 * i , SEEK_CUR); fgets(searchbuffer2 , i , input); _string_test(searchbuffer2); fprintf(output , "%s\t" , searchbuffer2); printf("%s\n" , searchbuffer2); //TESTZWECKE
Von diesen Einleseblöcken gibt es einige (auch vor diesem hier). Kann es sein, dass fgets den String nicht ordentlich überschrieben hat und dadurch Probleme entstanden? Oder sehe ich gar den Wald vor Bäumen nicht?
-
Stiefel2000 schrieb:
Ich versuche gerade, aus diversen Daten eine (bzw. mehrere) Textdatei zu erstellen. Es handelt sich dabei um eine längere while-Schleife, in der ab und an ein "fprintf" eingebettet ist. Vor jedem fprintf gibt es eine Kontrollfunktion, die Strings auf Fehler prüft.
Mein Problem ist nun, dass die Erstellung der Datei einfach irgendwann stoppt (sogar immer an der gleichen Stelle, bei ca. 50%). Dank der Kontrollfunktion weiß ich, dass das Programm ganz normal weiterläuft, meine Strings korrekt kontrolliert...nur irgendwie werden beim Weiterlaufen genau die fprintf-Befehle nicht mehr abgearbeitet, die in eine der Dateien schreiben sollen. Es wird parallel eine andere Datei erzeugt, mit der alles in Ordnung ist.Hat jemand eine Idee, wo das Problem liegen könnte? Der String, bei dem die Dateierstellung aufhört, ist leider auch um einiges einfacher gestrickt, als viele seiner biestigen Brüder - ich habe daher keine Ahnung, warum das Programm sich gerade dort entscheidet, alle fprintf's in diese Ausgabedatei zu ignorieren. Kann ein Filepointer abstürzen? Oder verträgt er vielleicht nur 50000 Schritte, bis er das zeitliche segnet?
Ich würde auch ein Quellcode-Beispiel liefern, aber dazu ist der Code zu komplex. Ich müsste dann alle Funktionen mit auflisten, da ich das Problem bisher nicht eingrenzen kann.
EDIT:
Ich habe gerade verzweifelt eine Zeile eingefügt und die Ausgabe lief bis zum Ende durch. Allerdings verstehe ich nicht, wieso.
searchbuffer2[0] = '\0'; //Die Zeile ist neu for(i = 1 ; '<' != fgetc(input) ; i++); fseek(input , -1 * i , SEEK_CUR); fgets(searchbuffer2 , i , input); _string_test(searchbuffer2); fprintf(output , "%s\t" , searchbuffer2); printf("%s\n" , searchbuffer2); //TESTZWECKE
Von diesen Einleseblöcken gibt es einige (auch vor diesem hier). Kann es sein, dass fgets den String nicht ordentlich überschrieben hat und dadurch Probleme entstanden? Oder sehe ich gar den Wald vor Bäumen nicht?
Das ganze bitte noch einmal, und zwar so, das man es versteht. Was willst du machen?
-
Ich will Strings in eine Textdatei schreiben. Sehr viele Strings, weshalb ich eine while-Schleife nutze. Da die Daten an anderer Stelle ausgelesen werden, nutze ich immer den selben "Puffer"-String.
Nun passiert(e) es mitten im Bearbeitungsprozess, dass die Erstellung der Ausgabedatei einfach abbrach - ich habe nicht herausgefunden, wieso. Nach dem Einfügen der oben kommentierten Zeile lief der Prozess wieder wie erhofft, allerdings verstehe ich nicht, weshalb.Ich bin nun auf der Suche nach einer Erklärung dieses Problems - vielleicht ist der Quelltext oben auch etwas aus dem Kontext gerissen, aber besser ging es nicht.
searchbuffer2 --> der beschriebene Puffer-String
Es werden alle Zeichen bis zum "<" eingelesen und (über ein paar Umwege) der String in einer Datei gespeichert. Dieser Prozess wird einige tausend Mal wiederholt, wobei nach ziemlich genau der Hälfte Probleme auftraten, an denen scheinbar nicht das eingelesene Material schuld war.