Zeile doppelt...
-
Hi!
Ich lese mit dieser function eine Zeile aus ner txt-datei:char *LibExtStr::ReadLine(FILE *pFile) { char line[256]; fgets(line, 256, pFile); return line; }
(im test prog tu ich das 2 mal)
aber ich bekomme nur die letzte zeile der datei 2mal ausgegeben ...FILE *pF = fopen("readlinetest.txt", "r"); if(!pF) printf("Datei fehler!\n"); char *strLine1 = new char[256]; strLine1 = LibExtStr::ReadLine(pF); char *strLine2 = new char[256]; strLine2 = LibExtStr::ReadLine(pF); printf("FirstLineFromFile: %s\nSecondLineFromFile: %s\n", strLine1, strLine2); fclose(pF);
weiss wer wo der fehler liegt? da bringt mich echt zur verzweifelung...
greets,
5th
-
lies dir nochmal etwas zum thema zeiger durch.
ReadLine ist falsch, denn du returnst einen zeiger auf ein lokales array
dieses array hoert aber beim return bereits auf zu existieren -> folglich zeigen deine 2 zeiger ins nirvana. (undefiniertes verhalten entsteht, und alles was dann noch passiert ist glueck oder pech - wie mans nimmt)
-
hm, kappier ich nicht so ganz, wie muss das denn anders aussehen?
wenn ich
char *line = new char[256];
mache, futntz es auch nicht
-
lies dir noch was zu zeigern durch und beantworte mir dann folgende fragen:
was passiert hier?
char* p=new char[100];
p="Hallo";
delete [] p;wo ist der unterschied zwischen
char* p=new char[100];
p="Hallo";
delete [] p;und
char* p=new char[100];
strcpy(p,"Hallo");
delete [] p;
-
ist doch alles samt das selbe?
1. array initialisieren
2. p den wert Hallo zuweisen
3. speicherbereich von p löschengreets,
cNcMastap.s: ich meld mich jetzt mal an
-
dann lies mal was ueber zeiger.
p="Hallo";
p zeit nun auf "Hallo"strcpy(p,"Hallo");
der text "Hallo" wird in den speicherbereich kopiert, auf den p zeigt.
p=new char[10];
p zeigt auf 10 freie bytes im speicherp="Hallo";
p zeigt nun auf "Hallo"
niemand zeigt mehr auf die 10 freien bytes -> Memory Leak
-
irgendwie bin ich heute dumm
ich hab was über zeiger gelesen, aber irgendwie fällt mir gar keine lösung für mein prog einkannst du dich vielleicht erbarmen und mich nicht länger im dunkeln tappen lassen?
greets,
cNc