String beliebiger Länge einlesen / Problem mit Funktion
-
seldon schrieb:
Nein, nein, es muss schon CHUNKSIZE + 1 sein, sonst ist der Sentinel nicht an der richtigen Stelle, wenn keine ganze Zeile eingelesen werden konnte.
ich weiß nicht. Laut code:
n += CHUNKSIZE; p = realloc(buf, n + 1); ... if(fgets(pos, CHUNKSIZE + 1, stream) == NULL) {
oBdA: wir reden vom ersten Durchlauf. Du reserierst n+1 Bytes. Du sagst fgets, es soll ebenfalls n+1 bytes lesen. Da fgets ein \0-terminiertes String garantiert, schreibt es n+2 Bytes.
//edit:
wer lesen kann, ist klar im Vorteil. Ich muss zugeben, dass ich nicht mehr sicher war, was fgets genau mit dem 'size' Parameter macht und hab die man-Page dazu gelesen. Da steht jachar *fgets(char *s, int size, FILE *stream);
...
fgets() reads in at most one less than size charactersAlso, ich nehm's zurück, was ich davor gesagt habe, da ich von einer falschen Annahme ausging.