无法在 C 中使用 fseek 和 fprintf 替换 \n

Cannot replace \n by using fseek and fprintf in C

我试着把光标移到\n,换成3,结果发现\n前面插了3。然后我尝试了 fseek (fp, 2, SEEK_SET),3 转到下一行的开头,然后是 2。 \n 仍然存在。有人可以解释为什么吗?或者仅仅是因为我的编译器的问题?谢谢!

#include <stdio.h>
#include <stdlib.h>
int main (void)
{
    FILE * fp = fopen ("test2.txt", "w+");
    fprintf (fp, "1\n");
    fprintf (fp, "2\n");
    fseek (fp, 0, SEEK_SET);
    fseek (fp, 1, SEEK_SET); // or fseek (fp, 2, SEEK_SET);
    fprintf (fp, "3");
    fseek (fp, 0, SEEK_SET);
    fclose (fp);
    return 0;
}

您显然在 Windows,其中写入 LF 会导致写入 CR 和 LF。

搜索前的文件:

31 0D 0A 32 0D 0A

在终端上显示:

1
2

fseek(fp, 2, SEEK_SET) 之后的文件并打印:

31 0D 33 32 0D 0A

在终端上显示:

32

最好使用ftell获取要查找的位置。

如果这是二进制文件而不是文本文件,请确保以二进制文件打开文件(使用 b 修饰符)。