On Fri, Feb 01, 2002 at 04:07:41PM +0000, Steffen Liebergeld wrote:
Am Mittwoch, 30. Januar 2002 21:50 schrieben Sie:
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
[...]
Hm. erstmal wieder OFF BY ONE. Wenn Du "anzahl" Elemente in Deinem Feld hast, dann kannst Du bestensfalls bis Index i = (anzahl - 1) zugreifen.
1 Element: Index 0 2 Elemente: Index 0 .. 1 3 Elemente: Index 0 .. 2 ...
Also:
for (int i = 0; i < anzahl; ++i) { ...
Und ++i ist m.E. schneller als i++, was aber hier wahrscheinlich unerheblich ist.
Dann mußt Du, wie andere auch schon schrieben, den Speicher besorgen für Deine Zeilen. Du hast nur ein Array (eine Liste) von Zeigern auf Zeichen. Aber die zeigen eben noch ins nichts.
Die klassische Variante wäre:
tmp[i] = (char*) malloc(80); // natürlich auch noch prüfen! Dazu passend dann irgendwann das free(tmp[i]) nicht vergessen!
Oder C++: tmp[i] = new char[80]; Dazu passend dann irgendwann delete tmp[i];
Oder die harte Tour: char tmp[80][anzahl]; Braucht dann kein delete oder free...
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?
Na ja, dynamischer sind sie. Und wenn Du sie als char* brauchst, dann
string.c_str()
oder Wenn Du ein einzelnes Zeichen brauchst:
string[i],
Was curses will, weiß ich nicht.
Heiko