PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem beim einlesen von daten aus einem stream



quallensteak
24-09-2005, 18:09
hallo,
ich hab hier nen filestream, aus welchem per getc() so viele zeichen eingelesen werden sollen, bis ein . (punkt) im stream erscheint:
int x=0;
for (x=0; headline[x] != '.'; x++) headline[x]=getc(filestream);
nur ungeklaerter weise haengt sich das programm bei dieser operation auf :(
die loesung sollte am besten in ansi-c ein, hab keine lust auf cpp umzusteigen ;>
gruss
Quallensteak

peschmae
24-09-2005, 18:53
Naja, du solltest halt wirklich gucken dass du nicht übers Arrayende hinausläufst.

Ausserdem scheint mir du checkst headline[x] != '.'; schon bevor headline[x] überhaupt gefüllt wurde?

Besser irgendwie sowas:

for (x=0; x < sizeof(headline) && (headline[x] = getc(filestream)) != '.'; x++);

MfG Peschmä

quallensteak
24-09-2005, 19:09
ay superb, das verlegen des checkpoints auf nach-dem-getc() hat super geklappt, danke!

Ko_Onrad
25-09-2005, 11:26
Naja, du solltest halt wirklich gucken dass du nicht übers Arrayende hinausläufst.

Ausserdem scheint mir du checkst headline[x] != '.'; schon bevor headline[x] überhaupt gefüllt wurde?

Besser irgendwie sowas:

for (x=0; x < sizeof(headline) && (headline[x] = getc(filestream)) != '.'; x++);

MfG Peschmä
Mit sizeof auf Pointer muss man aufpassen. Wenn das ganze in eine Funktion ausgelagert wird und headline als Parameter übergeben wird, kennt sizeof die "wahre" Größe nicht und gibt immer 4, also sizeof(char *) zurück.

peschmae
25-09-2005, 13:39
Da da nix stand nahm ich mal an dass das kein Pointer ist. Wenn das einer ist hast du natürlich recht :)
War auch mehr als ein "hier_bitte_die_grösse_einfüllen" gedacht ;)

MfG Peschmä