2014-10-07 46 views
-1

就像在主題中一樣,我嘗試逐行讀取文件,但程序沒有按照我想要的那樣做。所以我試着檢查一下,如果最後有一個\ n,並且如果不是這個行的空間不夠用,所以我重新分配它,並把行的位置放到舊的長度中什麼將被讀取順序來連接下一個:在C語言中逐行讀取文件,concat在realloc後不起作用

int max_line_len = 10000; 
    int line_pos = 0; 
    char *line; 
    line = malloc(sizeof(char)*max_line_len); 

    while (fgets(&line[line_pos], max_line_len, file) != NULL) { 

     int line_length = strlen(line); 
     if (line[line_length - 1] == '\n') { 

      // do something to the lines 
      line_pos = 0; 
     } else { 
      max_line_len *= 2; 
      line_pos = line_length; 
      line = realloc(sizeof(char) * max_line_len); 
     } 
    } 
} 
fclose(file); 
free(line); 

但realloc的後一整行甚至不讀,他不斷進入(其他部分

+0

這是你的完整碼嗎? – 2014-10-07 07:17:58

+0

這不是真正的代碼。這個'realloc'調用甚至不應該編譯。 – user694733 2014-10-07 07:20:26

+0

沒有它的不是,但唯一我認爲這將是重要的,因爲錯誤發生在realloc部分 – malajedala 2014-10-07 07:20:37

回答

0

fgets讀太多的第一realloc後。 line_pos是9999和max_line_len是20000,這意味着您最終會讀到索引9999 .. 29999,此時最後一個有效索引line僅爲19999.

+0

好吧我知道現在,但你不能給一些提示如何解決它? – malajedala 2014-10-07 07:43:23

+0

@malajedala您需要跟蹤您的緩衝區有多少可用空間。簡單的減法可能會:'max_line_len - line_pos'。 – user694733 2014-10-07 07:56:24

+0

但我認爲這是由realloc管理:S..it獲取更多空間的閱讀:S ?? – malajedala 2014-10-07 09:40:56