使用 fseek 和 fwrite 覆盖文件中的一行

Using fseek and fwrite to overwrite a line in a file

我有一个文本文件,其中每一行都以“\n”结尾。像这样

0000
0000
0000
0000

现在,一个文件最初像上面那样开始,但是一行可以被另一行可变长度覆盖。我正在使用 fseek() 来设置流的位置指示符。我可以毫无问题地移动到一行并将例如 0000 替换为 1111

现在假设我想用 1111 1111 替换第一行。我执行以下操作

char *str = "1111 1111\n";
fwrite(str, 1, strlen(str), file);

这会像这样删除第 2 行和第 3 行的 1 个字节

1111 1111
000
0000

这是什么原因?

如果您认为您的文件是这样的: “0000\n0000\n0000\n0000\n”

当您覆盖第一行时,您实际上是在覆盖前 n 个字符,这样会更容易理解。 这就是为什么你的第二行消失了。