C++ Textdatei Zeilenweise ausgeben

i!i!i!i!i!i!i!i

Cadet 2nd Year
Registriert
Dez. 2008
Beiträge
23
Hallo,
Ich möchte eine Textdatei zeilenweise ausgeben.

Das Grundprinzip ist klar:
Ich habe ein Array, in dem ich die einzelnen Zeilen speichere und zum Schluss ruf ich z.B.: Speichern() auf, das mir dann per for-Schleife die einzelnen Zeilen ausgibt.

Scheitern tut es allerdings schon da, dass ich die Zeilem im Array speichern will.
Ich habe schon 100 verschiedene Sachen probiert, aber keine mag so richtig funktionieren.

Hier mal eine Lösung, die mir am logischsten erscheint:
Code:
char  * line[100];
void saveLine(int LineID)
{
strcpy(line[LineID], "Stunde: ");
strcat(line[LineID],(char *)hour); //hour ist int
strcat(line[LineID],": BLA TEST USW");
}
Das wird auch erst mal compiliert, aber spbald ich das im Programm aufrufe kommt folgender Fehler:
Unbehandelte Ausnahme bei 0x005eee79 in Protokoll.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00000000.

Was hab ich falsch gemacht? Oder bin ich mit dieser Lösung völlig falsch?

Ich habe auch mit Strings rumbrobiert oder mit ostringstream, aber nichts von dem funktioniert.

Kennt jemand eine Lösung?
Fast jedes Programm gibt ja heutzutage Logfiles aus...

Grüße i!i!i!i!i!i!i!i
 
Die Begründung schreibst du doch selbst als Kommentar hin: "hour ist int". Ein Type-Cast von int zu char* macht halt nun mal keinen Sinn, denn strcat erwartet ein Char-Array und keinen Integer-Wert. Beim Type-Cast sagst du halt "nimm den Wert, der in hour steht als Adresse und betrachte die Adresse als Char-Array"... klar kommt es da zu nem Zugriffsfehler...

Ich würde mit sprintf() aus dem Int ein Char-Array machen... bei richtigem C++ (was auch string statt char* bedeuten würde für mich) würde man einen stringstream beispielsweise für die Konvertierung nehmen.
 
Zuletzt bearbeitet:
Hallo,

Du initialisierst den Pointer nicht und er hat deshalb keine gültige Adresse auf dem Speicher, an den du schreiben kannst.

Du solltest dich diesbezüglich einmal mit den Grundlagen von Pointern und Arrays beschäftigen, dann löst sich dein Problem von selbst ;)

mfg daengl
 
@daengl: Wenn du mit dem Pointer "hour" meinst kein Wunder, schließlich soll das kein Pointer sein...
Ansonsten fehlt so viel vom Code dass es unmöglich ist zu sagen wo irgendeine Initalisierung fehlen könnte...
 
@1668mib:

nein, ich meine char *line...

Die Fehlermeldung mit
Zugriffsverletzung beim Schreiben an Position 0x00000000
deutet doch sehr stark auf einen nicht initialisierten Pointer hin.

mfg daengl
 
Hmm ok.... dann sind's also mehrere Fehler, ja :-)

Hast schon recht, ist ein Fehler beim Schreiben...
 
Mal abgesehen von den bisher genannten Fehlern würde ich doch statt der 3 str...-Befehle 'sprintf' bzw. 'snprintf' empfehlen - dann benötigt man auch den semantisch falschen Typecast beim ersten 'strcat' nicht mehr.
 
Wenn man sich n Tutorial mit den Pointern nochmal anschaut merkt man, was man eigentlich alles falsch machen kann :p

Ich habe festgestellt, dass das was ich machen will mit chars gar nicht geht.

Ich habe jetzt eine Lösung mit einem String Array und ostringstream gefunden.

Danke für die Hilfe!
 
Zurück
Oben