2016-05-12 6 views
0

Ich benutze getline, um eine Datei zu lesen. Es funktioniert perfekt, abgesehen von einem seltsamen Verhalten, das ich nicht verstehen kann. Betrachten Sie das folgende Stück Code. Jetzt test.txt ist eine Datei mit einem einzelnen Eintrag sagen 1. Ich verwende den folgenden Code und ich bekomme das gewünschte Ergebnis, dh getline liest den Eintrag 1. Jetzt füge ich einen weiteren Eintrag sagen 2 jetzt die Datei test.txt enthält die Einträge 1 und 2 , liest getline beide Einträge wie erwartet. Jetzt aber ich, wenn ich den zweiten Eintrag 2 aus test.txt löschen und den Code erneut ausführen liest getline eine zusätzliche Zeile. Ich bin mir nicht sicher warum. Wenn ich jetzt die alte Datei test.txt lösche und eine neue Datei test.txt mit nur einem Eintrag 1 erstelle, funktioniert der folgende Code einwandfrei.getline Lesen einer Datei mit einem einzigen Eintrag nach dem Löschen eines zweiten Eintrags seltsames Verhalten

#include <stdio.h> 
#include <stdlib.h> 


int main(void) 
{ 
    FILE *fp; 
    char *line = malloc(100*sizeof(char)); 
    size_t len = 100; 
    ssize_t read; 
    fp = fopen("test.txt", "r"); 
    while ((read = getline(&line, &len, fp)) != -1) { 
     printf("Retrieved line of length %zu :\n", read); 
     printf("%s", line); 
    } 
    return 0; 
} 
+0

Da ist ein Newline-Zeichen übrig ... –

+0

Wie kann man dies vermeiden, ohne eine neue Datei erneut zu erstellen? –

+0

Löschen Sie es mit der Rücktaste? –

Antwort

0

Getline liest alles, bis das Ende der Zeile Zeichen gesehen wird. Sie müssen sicherstellen, dass Sie das Endline-Zeichen nicht in der gelöschten Zeile belassen haben. Sie können dies erreichen, indem Sie die Rücktaste drücken.

Verwandte Themen