2013-05-13 57 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