无法在 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
修饰符)。
我试着把光标移到\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
修饰符)。