Iceman346 Geschrieben 7. März 2008 Teilen Geschrieben 7. März 2008 Ich schreib grad an einem ersten kleinen Programm für meine, Anfang der Woche angefangene FIAE Ausbildung Aber so ganz will es grad nicht. Folgenden Programmcode nutze ich: ifstream * lesen = new ifstream("53967.JDF"); char text[100] = ""; *lesen >> text; while (!(*lesen).eof()) { cout << text << endl; *lesen >> text; } dies stürzt dann immer bei der Ausgabe der Datei ab. Gibt es irgendein Problem mit der Größe vielleicht? Verkleinere ich den Inhalt der Datei geht es. Die Datei enthält einfachen .xml Code und ist ~17kb groß. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kaeyu Geschrieben 7. März 2008 Teilen Geschrieben 7. März 2008 Hm..., falls du eine schnelle Lösung brauchst, dann benutz doch einfach einen String anstatt ein char Array. Funktioniert auch. Aber ich denke mal das weißt du auch, du möchtest es aber gerne mit dem char Array zum laufen bekommen oder?^^ Sobald man ein Array verwenden will, gibts nen Crash... Zeichen für Zeichen lässt sich problemlos einlesen und ausgeben. Böse Arrays.... hm.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Shelltux Geschrieben 7. März 2008 Teilen Geschrieben 7. März 2008 Nabend, wie mein Vorredner bereits angesprochen hat, versuch mal folgendes ifstream lesen = new ifstream("53967.JDF"); string text = ""; while (! lesen.eof()) { getline(lesen, text); cout << text << endl; } Deine Pointeraritmethik war meine ich auch nicht ganz korrekt. Pointer sind schon ne feine Sache, aber unter C++ benutze ich zumindest sie nur selten da ich ja "strings" hab. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Iceman346 Geschrieben 7. März 2008 Autor Teilen Geschrieben 7. März 2008 Werd ich nächste Woche oder so mal ausprobieren, danke für die Tipps. Strings sind sowieso besser, da ich im Endeffekt den Inhalt der Datei mit ner Vorgabe vergleichen will und das geht über Strings ja deutlich einfacher. Scheint aber irgendwie an der Datei zu liegen, hab mal ne deutlich größere Datei (~160kb) versucht, da lief er problemlos durch, hab dann wieder auf die andere Datei gewechselt, da stürzte er wieder ab. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
d.uNd.eE Geschrieben 12. März 2008 Teilen Geschrieben 12. März 2008 kann auch daran liegen, dass die Datei möglicherweise UTF 16 ist , du aber ASCII (oder UTF-8:confused: :floet:)einliest, und dass da dann irgend n exitcode rauskommt. ka, wäre aber nicht auszuschliessen würd ich ma so sagen (ohne gross nachzudenken, bin müde :hells:) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Iceman346 Geschrieben 12. März 2008 Autor Teilen Geschrieben 12. März 2008 Mit Strings stürzt auf jeden Fall nichts ab Keine Ahnung woran es beim Char lag. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
d.uNd.eE Geschrieben 12. März 2008 Teilen Geschrieben 12. März 2008 @Iceman346 gut... Mir fällt grad auf, dass ich eben mist gelaber hab, wenns mit strings geht *rofl* Ja, ich hab grad meinen ersten Kaffee getrunken und meine erste kippe geraucht und nein, ich bin nicht arbeitslos :-D Ich hab Urlaub :-P Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Toothrot Geschrieben 13. März 2008 Teilen Geschrieben 13. März 2008 ifstream * lesen = new ifstream("53967.JDF"); char [COLOR="Red"]text[100][/COLOR] = ""; *lesen >> text; while (!(*lesen).eof()) { cout << text << endl; *lesen >> text; } dies stürzt dann immer bei der Ausgabe der Datei ab. Gibt es irgendein Problem mit der Größe vielleicht? Verkleinere ich den Inhalt der Datei geht es. Die Datei enthält einfachen .xml Code und ist ~17kb groß. Das Programm stürzt ab, wenn mehr als 100 Zeichen in einer Zeile stehen. Mehr passt halt nicht ins Array. Übrigens wird mit diesem Code die letzte Zeile nie ausgegeben, weil eof() erreicht ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Iceman346 Geschrieben 13. März 2008 Autor Teilen Geschrieben 13. März 2008 Das Programm stürzt ab, wenn mehr als 100 Zeichen in einer Zeile stehen. Mehr passt halt nicht ins Array. *Geräusch einer Hand die auf die Stirn klatscht* Da hätt ich auch selbst drauf kommen können ^^ Übrigens wird mit diesem Code die letzte Zeile nie ausgegeben, weil eof() erreicht ist. Jo, hatte das mit der String Variante gemerkt und geändert. Im Endeffekt war der Aufwand aber erstmal sowieso nicht nötig, da das Programm momentan noch keine Dateien durchsuchen soll. War ursprünglich als Programm geplant welches Dateien von einem FTP Server holt, nach bestimmten Markierungen schaut und diese aussortiert, aber erstmal reicht es wenn nur die Dateien kopiert werden und das klappt auch wunderbar. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 13. März 2008 Teilen Geschrieben 13. März 2008 Übrigens wird mit diesem Code die letzte Zeile nie ausgegeben, weil eof() erreicht ist. Nein, das ist schon richtig so. eof liefert erst dann true, wenn ein Lesevorgang fehlgeschlagen ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Toothrot Geschrieben 13. März 2008 Teilen Geschrieben 13. März 2008 Ich habe es ausprobiert, wenn man ans Ende der letzten Zeile keinen Zeilenumbruch setzt, wird diese nicht ausgegeben. Allerdings blicke ich gerade auch nicht durch, warum dem so ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 13. März 2008 Teilen Geschrieben 13. März 2008 Ich habe es ausprobiert, wenn man ans Ende der letzten Zeile keinen Zeilenumbruch setzt, wird diese nicht ausgegeben.Du hast Recht. Ich habe das mit dem Verhalten von feof verwechselt. Bei Streams sollte man aber eigentlich immer den Stream selbst als Schleifenbedingung benutzen. Es gibt andere Dinge außer dem Dateiende, die einen Abbruch bewirken sollten. Wenn man nur auf EOF prüft, hat man dann schnell eine Endlosschleife. Also besser so: while (lesen >> text) { cout << text << endl; }[/code] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.