2016-05-12 13 views
0

私はファイルを読むためにgetlineを使用しています。それは私が理由を理解することができない1つの奇妙な行動を除いて完璧に動作します。次のコードを考えてみましょう。今test.txtは1つのエントリを含むファイルです。私は次のコードを使用し、getlineはエントリ1を読み込みます。今度は別のエントリ2を追加します。test.txtファイルにエントリ1と2が含まれています。 、getlineは両方のエントリを期待どおりに読み込みます。しかし、今私はtest.txtから2番目のエントリ2を削除し、コードを再度実行するとgetlineは余分な行を読み込みます。なぜ私は分からない。今度は、古いファイルtest.txtを削除し、1つのエントリだけで新しいファイルtest.txtを作成すると、次のコードは完全に動作します。2行目のエントリを削除した後、getlineが1つのエントリを持つファイルを読み込んだ

#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

左改行文字があるので... –

+0

はどのようにして、再び新しいファイルを作成せずにこの問題を回避することができます –

+0

バックスペースでそれを削除しますか? –

答えて

0

ゲットラインは、行末の文字が表示されるまですべてを読み取ります。削除された行にエンドライン文字を残していないことを確認する必要があります。バックスペースを押すことでそれを達成することができます。

関連する問題