S
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 ja
char *fgets(char *s, int size, FILE *stream);
...
fgets() reads in at most one less than size characters
Also, ich nehm's zurück, was ich davor gesagt habe, da ich von einer falschen Annahme ausging.