fgetc
从文件读取字符
需要的头文件:
#include <stdio.h>
函数原型:
int fgetc(FILE *stream);
参数:
- stream:文件指针
- 返回值:成功会返回读取到的的字符;若读取文件时发生错误,或是已经读取到文件末尾,则返回EOF
fputc
向文件写入字符
需要的头文件:
#include <stdio.h>
函数原型:
int fputc(int c, FILE *stream);
参数:
- c: 待输出的字符,也可以是字符串
- stream: 文件指针
- 返回值:传入的字符
feof
feof()是检测流上的文件结束符的函数,一般在文件操作,中经常使用feof()判断文件是否结束。
需要的头文件:
#include <stdio.h>
函数原型:
int feof(FILE *stream);
参数:
- stream:文件指针
- 返回值:如果文件结束,则返回非0值,否则返回0
实操演示
demo10.c:
若读取时不使用feof:
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp;
char *str = "mjmmjm";
int size_str = strlen(str);
int i;
char c;
fp = fopen("./mjm.txt","w+");
for(i=0; i<size_str; i++){
fputc(*str,fp);
str++;
}
fseek(fp,0,SEEK_SET);
while( (c=fgetc(fp)) != EOF ){
putchar(c);
}
printf("\n");
fclose(fp);
return 0;
}
实现效果1:
成功读取!
若读取时使用feof:
即将fgetc部分的代码修改为:
while(!feof(fp)){
c = fgetc(fp);
printf("%c",c);
}
实现效果2:
同样成功读取,但是在结尾多了一个乱码符号
两种实现有差别的原因:
回顾刚刚feof的介绍:
feof()是检测流上的文件结束符的函数
所以,通过fgetc返回值来判断是否读完时,读到最后一个字符就结束了;而通过feof来判断是否读完时,读到最后一个字符还没有结束,还要在读一位,读到“文件结束符”才能结束,这也使得多打印了一位,那个乱码的符号其实就是“文件结束符”!