2014-05-08 27 views
-1

我試圖讀取文件的內容到一個字符串,而不在頭兩行閱讀。讀取文件的內容轉換爲字符串,而跳過前兩行

現在我有:

char* LoadDocument(char* name) { 
    char* buffer = 0; 
    long length; 
    FILE* f = fopen(name, "r"); 
    if(f) { 
     fseek(f, 0, SEEK_END); 
     length = ftell(f); 
     fseek(f, 0, SEEK_SET); 
     buffer = malloc(length); 
     if (buffer) { 
     fgets (buffer, 100, f); 
     } 
     fclose (f); 
    } 
    return buffer; 
} 

但我不知道如何跳過前兩行。另外,看起來我的malloc不足以保存整個文件,因爲它沒有得到整個文件。

+2

你沒有得到完整的文件在'buffer'因爲你只讀*最多*'100'字節,直到第一個換行符(以先到爲準)。還記得'fgets'終止緩衝*爲字符串*,所以你需要分配一個額外的字符爲終結。 –

回答

0

最簡單的辦法就是看你的「真正的」閱讀前兩行開始:

char line[1024]; 

fgets(line, sizeof line, f); 
fgets(line, sizeof line, f); 

你或許應該太錯誤檢查這一點,因爲該文件可能是短在這種情況下,你不會獲得預期的結果。長度也可能太短。如果您確實想要支持任意長度,請閱讀單個字符,直到找到行尾爲止。

您的最終fgets()應該可能是fread()調用,以讀取整個文件的其餘部分。您可能要爲失去的length補償由於最初的跳躍,太。

+0

+1遠遠不是把整個文件在內存中 – Basilevs

1

一種解決方法是將read的完整文件放入緩衝區,手動找到第二行的結尾,並將其餘數據以move的剩餘數據到緩衝區的開頭。

另外,不要忘記添加字符串結束,如果你想使用緩衝區作爲一個字符串。

+0

更好如何以二進制方式打開文件,並跳過2個換行符和複製其他人呢? – Subhajit

+0

@Subhajit這也適用。 –

相關問題