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: 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);
...
Letztlich soll sich doch jeder selber für die für ihn geeignetste Programmiersprache entscheiden.
Gut so... ich hab mir gerade ein paar COBOL-Quelltexte durchgelesen, eine Sprache die laut Statistik noch recht häufig in Firmen eingesetzt wird. Man sollte also zumindest eine Schmerzgrenze definieren :)
Josef Spillner