Am Mittwoch, 30. Januar 2002 21:50 schrieben Sie:
Hallo,
On Wednesday, 30. January 2002 23:30, Steffen Liebergeld wrote: [...]
char *temp[anzahl]; for (int i=0; i<=anzahl; i++){ foren.getline(temp[i],80);///<-Hier müsste das Problem liegen
[...]
Ich habe hier also eine Datei, an deren Anfang die Anzahl der Einträge (Zeilen) steht (daher foren >> anzahl). Jetzt will ich jede Zeile in ein *char[n] reinschreiben. Alles was rauskommt ist ein wundervoller Speicherzugriffsfehler. Habt ihr einen Tipp was ich anders machen muss damit es funktioniert?
Du schreibst in einen nicht allokierten Speicherbereich. Das Feld temp mußt du dir so vorstellen: (temp[0])(temp[1])(temp[2])(...) Jede der Runden Klammern (...) ist 4 Byte lang auf einem normalen x86-Rechner, weil es nur Pointer sind, die irgendwo hinzeigen, und keiner weiß wohin. Du müßtest also erst den Platz reservieren (in C wird das über malloc() gemacht), aber in C++ geht das viel besser:
ok, malloc also. Aber wie bekome ich den zeiger in mein programm wenn malloc void ist?
Du nimmst dir eine Liste von Strings, und verwendest weiterhin den operator>>, d.h. so wie du die erste Zeile einliest. Noch besser (und eleganter) ist es, die erste Zeile wegzulassen, und die Liste dynamisch zu erweitern bis die Datei zuende ist, z.B. über: list<string> a: a.push_back(s);
Strings würden mir nur dann was nützen wenn ich sie in *char[i] zurückverwandelt könnte. (n)curses geben nämlich in den waddstr() funktionen nur solche sachen aus. Aber strings sind doch im grunde auch nur char arrays oder?