这就是我想要做的,
我有一个包含信息的文件。我试图在每一行之前重写它,行数会出现。
我想到的基本想法是这样的:
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:0xC0000005:访问冲突写入位置0xfffff204。
答案 0 :(得分:1)
一般情况下,您无法将其投入使用。在行的开头添加行号,然后将其写回文件,将导致第一行的尾端覆盖第二行的开头。您需要将修改后的行写入单独的文件,然后在完成后覆盖原始文件。或者,将文件的所有行存储在内存中,然后在第二遍中覆盖该文件,但这对于大文件来说会有问题。
答案 1 :(得分:0)
我认为问题在于尝试通过strlen(str)增加FILE *。没有它就试试吧。
答案 2 :(得分:0)
你正在递增f1。这并不意味着你认为它意味着:)
由于您要将数据插入到文件中,因此您需要实际写入不同的文件,或者在内存中全部写入并一次写入文件。此外,您想要读到文件的末尾。