2013-05-13 59 views
0

這就是我想要做的,未處理的異常,將信息寫入文件C語言

我有一個帶有信息的文件。我試圖在每行之前重寫它,行號會出現。

的基本想法,我心目中是這樣工作的:

while i haven't reached the end of the file: 
save the first line of the file (100 characters or until null is reached) in str 
go back to the file, and write "line number" and then the info in str. 
now str takes the next 100 chars...rinse and repeat. 

實際代碼:

void add_line_number(FILE* f1) 
{ 
    char str[100]; 
    int i=1; 
    fseek(f1,0,SEEK_SET); 
    do 
    { 
     fgets(str,100,f1); 
     fprintf(f1,"%d %s",i,str); 
     i++; 
     f1+=strlen(str); 
    }while(strlen(str)); 
} 

得到的錯誤:未處理的異常在0x77e78dc9徵文4.exe:0000005:訪問衝突寫位置0xfffff204。

回答

1

一般情況下,你不會是能夠得到這個地方工作。在該行的開頭添加一個行號,然後將其寫回該文件,將導致第一行的末尾覆蓋第二行的開頭。您需要將修改後的行寫入單獨的文件,然後在完成後覆蓋原始文件。或者,將文件的所有行存儲在內存中,然後在第二遍中覆蓋該文件,但對於大型文件來說會有問題。

0

我認爲這個問題是在試圖增加文件*通過的strlen(STR)。沒有這個嘗試。

+0

我試過了。我進入一個無限循環,因爲海峽始終以相同的字符串(從f1到下一個\ 0,因爲F1是恆定的,所以是STR) – 2013-05-13 19:59:04

+0

此外,在同一圈上的同一個文件*做fprintf中作爲與fgets是不是一個好主意。 – edtheprogrammerguy 2013-05-13 20:09:14

0

你遞增F1。這並不意味着你似乎在想什麼意思:)

既然你將數據插入文件,你需要實際寫入到不同的文件,或做這一切在內存中,並寫入到一次歸檔。此外,你想讀到文件的末尾。

+0

我不明白。你可以解釋嗎?爲什麼我需要另一個文件?爲什麼增加f1是一件壞事? – 2013-05-13 20:07:42

+0

@OriaGruber你認爲增加f1意味着什麼? – quamrana 2013-05-13 20:09:57

+0

增加f1,使其指向文件下一行的第一個字符。 – 2013-05-13 20:11:19