我有一个名为datafile.txt的文件,其中包含
Line 1 here
Line 2 here
我想将第一行存储在一个字符数组中,然后用't'替换第二行的第一个字符,所以我为此编写了以下代码:
#include <stdio.h>
int main(){
FILE *fp=fopen("datafile.txt","r+");
char line[100];
fgets(line,100,fp);
printf("The position of file pointer is %d",ftell(fp));
fprintf(fp,"t");
fclose(fp);
}
输出
The position of file pointer is 13
这里的问题是fprintf在这种情况下不工作,即我已经测试了fprintf的返回值,它出现为1,这意味着fprintf正在工作,但是当我打开datafile.txt文件时,我可以看到第二行的第一个字符没有被't'替换。如果我添加这样的fseek语句,那么它可以工作:
#include <stdio.h>
int main(){
FILE *fp=fopen("datafile.txt","r+");
char line[100];
fgets(line,100,fp);
fseek(fp,ftell(fp),SEEK_SET);
printf("The position of file pointer is %d",ftell(fp));
fprintf(fp,"t");
fclose(fp);
}
屏幕上的输出与上一种情况相同,但在这种情况下,第2行的第一个字符被't'替换。
有人可以解释一下为什么在第一种情况下这不起作用,但在添加fseek声明后它可以工作。文件指针的位置在两种情况下都是相同的,在第一种情况下它不起作用。