0

这就是我想要做的,

我有一个包含信息的文件。我正在尝试重写它,所以在每一行之前,都会出现行号。

我想到的基本想法是这样的:

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));
}

收到错误:文章 4.exe 中 0x77e78dc9 处的未处理异常:0xC0000005:访问冲突写入位置 0xfffff204。

4

3 回答 3

1

通常,您将无法使其正常工作。在行首添加行号,然后将其写回文件,将导致第一行的尾端覆盖第二行的开头。您需要将修改后的行写入单独的文件,然后在完成后覆盖原始文件。或者,将文件的所有行存储在内存中,然后在第二遍中覆盖文件,但这对于大文件会产生问题。

于 2013-05-13T20:15:15.083 回答
0

我认为问题在于试图通过 strlen(str) 增加 FILE*。试试没有那个。

于 2013-05-13T19:56:51.913 回答
0

您正在增加 f1。这并不意味着你似乎认为它意味着什么:)

由于您要将数据插入文件,因此您需要实际写入另一个文件,或者在内存中完成所有操作并一次写入文件。另外,您想读到文件的末尾。

于 2013-05-13T20:05:23.157 回答