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:
Hi Steffen,
<schnipp>
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.
Du solltest dich langsam mal entscheiden, ob du nun C _oder_ C++ programmieren möchtest ;) Unter C++ verwendet man zur Speicherallokierung das Schlüsselwort 'new'.
for (int i = 0; i < x; i++) tmp[i] = new char[80];
Um den Speicher wieder frei zu geben verwendet man nicht free() sondern 'delete'. Da du hier einen Array allokiert hast, musst du '[]' zwischen Schlüsselwort und Pointer setzen.
for (int i = 0; i < x; i++) if (tmp[i]) delete [] tmp[i];
Aber wie bekome ich den zeiger in mein programm wenn malloc void ist?
Genau so, wie du es unter C machen würdest: casten Nur das man unter C++ nicht () sondern dynamic_cast<> verwendet (wie ich seit kurzem weis :))
Unter C: time_t *ptr = (time_t*)malloc(sizeof(time_t));
Unter C++: AObject *ptrA = dynamic_cast<AObject*>ptrB;
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.
string mString = "Hallo Welt!"; printf("Text: %s\n", mString.c_str());
Ciao, Tobias