fgetc, fputc, feof

fgetc

从文件读取字符

需要的头文件:

#include 

函数原型:

 int fgetc(FILE *stream);

参数:

  • stream:文件指针
  • 返回值:成功会返回读取到的的字符;若读取文件时发生错误,或是已经读取到文件末尾,则返回EOF

fputc

向文件写入字符

需要的头文件:

#include 

函数原型:

int fputc(int c, FILE *stream);

参数:

  • c: 待输出的字符,也可以是字符串
  • stream: 文件指针
  • 返回值:传入的字符

feof

feof()是检测流上的文件结束符的函数,一般在文件操作,中经常使用feof()判断文件是否结束。

需要的头文件:

#include 

函数原型:

int feof(FILE *stream);

参数:

  • stream:文件指针
  • 返回值:如果文件结束,则返回非0值,否则返回0

实操演示

demo10.c:

若读取时不使用feof:

#include 
#include 

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

实现效果1:

成功读取!

若读取时使用feof:

即将fgetc部分的代码修改为:

while(!feof(fp)){
		c = fgetc(fp);
		printf("%c",c);
}

 实现效果2:

同样成功读取,但是在结尾多了一个乱码符号 

两种实现有差别的原因:

回顾刚刚feof的介绍:

feof()是检测流上的文件结束符的函数

所以,通过fgetc返回值来判断是否读完时,读到最后一个字符就结束了而通过feof来判断是否读完时,读到最后一个字符还没有结束,还要在读一位,读到“文件结束符”才能结束,这也使得多打印了一位,那个乱码的符号其实就是“文件结束符”!

你可能感兴趣的:(算法,linux,系统编程)