#include<stdio.h>
int main()
{
FILE * file;
file=fopen("out.txt","r");
printf("%d\n",ftell(file));
int ch=fgetc(file);
printf("%d\n",ch);
printf("%d\n",ftell(file));
fflush(file);
ch=fgetc(file);
printf("%d\n",ch);
printf("%d\n",ftell(file));
rewind(file);
printf("%d\n",ftell(file));
ch=fgetc(file);
printf("%d\n",ftell(file));
printf("%d\n",ch);
fclose(file);
return 0;
int main()
{
FILE * file;
file=fopen("out.txt","r");
printf("%d\n",ftell(file));
int ch=fgetc(file);
printf("%d\n",ch);
printf("%d\n",ftell(file));
fflush(file);
ch=fgetc(file);
printf("%d\n",ch);
printf("%d\n",ftell(file));
rewind(file);
printf("%d\n",ftell(file));
ch=fgetc(file);
printf("%d\n",ftell(file));
printf("%d\n",ch);
fclose(file);
return 0;
}
out.txt中数据为:abcdefghijklmn[enter]。加上EOF一共16字节[enter]以'\n'保存ascii码为10;
输出结果是
0
97
1
-1
16
0
1
97
说明当文件刚刚被打开时,文件指针file为0,当从缓冲区读取了一个字符‘a’时,file为1,当fflush(file)后,缓冲区被刷新,即abcdefghijklmn[enter],这16个字符从缓冲区中删除,file变成16,rewind(file),file变成0,此时file指向‘a’,说明file的指向的本质上是文件,而不是缓冲区,因为假设file指向的是缓冲区,当fflush(file)后,缓冲区清空,那么此时file为0,ch=fgetc(file)只能取到EOF,不可能取到‘a’。