2016-05-12 30 views
0

我正在使用getline讀取文件。它除了一個奇怪的行爲,我不明白爲什麼完美的作品。考慮下面的一段代碼。現在test.txt是一個包含單個條目的文件,說1。我使用下面的代碼,我得到所需的結果,即getline讀取條目1.現在我添加另一個條目說2現在文件test.txt包含條目1和2 ,getline按預期讀取這兩個條目。但是現在,當我從test.txt中刪除第二個條目2並再次運行代碼時,getline會讀取額外的一行。我不知道爲什麼。現在,如果我刪除舊文件test.txt並創建一個新文件test.txt只有一個條目1,下面的代碼完美工作。getline在刪除第二個條目後讀取單個條目的文件怪異行爲

#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

Getline讀取所有內容,直到看到行結束符爲止。您必須確保您沒有在已刪除的行中留下末尾的字符。你可以通過按退格鍵來實現。

相關問題