EOF wird mitgespeichert



  • Hab folgende Situation:

    Es soll ein .txt File eingelesen werden und modifiziert werden. Zuerst kommt der originaltext und anschließend der modifizierte Text (nur stdio.h und stdlib.h erlaubt).

    den Originaltext les ich mit getchar() ein und gib ihn auch gleichzeitig (noch in der while-Schleife) mit putchar(c) aus.
    In der gleichen Schleife will ich den Text in ein Array einlesen, wo ich zuvor den Speicher reserviert habe. Per switch soll aus bestimmten Sonderzeichen die html-Version drinstehen (@ -> " [at] ").
    while((*pc = getchar()) != EOF)
    {
    c = *pc;
    putchar(c);
    switch(*pc)
    {
    case '@':
    {
    a[s] = ' ';
    a[s++] = '[';
    ....
    } break;
    default:
    {
    a[s] = *pc;
    s++;
    }
    }
    }

    Aber wie kann ich verhindern, dass er mir auch das EOF (= -1) mit einlest? Er spuckt am ende (ohne Compiler-Fehler) folgendes aus:
    *** glibc detected *** ./a: free(): invalid next size (fast): 0x09a62018

    den pointer "a" und "s" hab ich auch wieder freigegeben.

    mfg rumpfi



  • Das EOF muss eingelesen werden, wenn du alle Daten einer Datei bearbeiten willst - sonst merkt das Programm nicht, ob alle Daten bearbeitet wurden.
    Außerdem sorgst du ja mit der Zeile

    while((*pc = getchar()) != EOF)

    , das die while Bedingung gar nicht erst abgearbeitet wird.
    Der Fehler wird also ein anderer sein, nämlich irgendwas mit der Speicherreserverwaltung:

    ./a: free(): invalid next size (fast): 0x09a62018

    Vermutlich versuchst du Speicher freizugeben, der nicht von malloc reserviert wurde oder sowas.

    Gruß,
    B.B.


Anmelden zum Antworten