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 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.


Anmelden zum Antworten