为什么fprintf在fgets之后不起作用?

时间:2017-08-20 06:20:53

标签: c file printf fgets fseek

我有一个名为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声明后它可以工作。文件指针的位置在两种情况下都是相同的,在第一种情况下它不起作用。

0 个答案:

没有答案