目录
一. 函数功能
1.1 fgetc与getc的功能
这两个函数的功能都是从指定的流中获取字符。
fgetc函数原型:int fgetc(FILE *stream)
getc函数原型: int getc(FILE *stream)
使用方法演示代码:
int main()
{
FILE* pf = fopen("text.txt", "r"); //以只读的方式打开文件,文件中存储abcdef
if (NULL == pf) //检验是否打开成功
{
perror("fopen");
return 1;
}
char c1 = fgetc(pf); //使用fgetc函数读取字符,pf发生偏移
char c2 = getc(pf); //用getc函数读取字符,pf再次发生偏移
printf("c1 = %c, c2 = %c\n", c1, c2); //c1 = a, c2 = b
fclose(pf);
pf = NULL;
return 0;
}
1.2 fputc与putc的功能
这两个函数的功能都是将指定的字符输入到指定的流中
fputc函数原型:int fputc(int c, FILE *stream)
putc函数原型:int putc(int c, FILE *stream)
其中c表示指定的字符对应的ASCII吗值,stream表示指定的流
使用方法演示代码:
#include<stdio.h>
int main()
{
FILE* pf = fopen("text.txt", "w"); //以写的方式打开文件
if (NULL == pf)
{
perror("fopen");
return 1;
}
char c1 = 'a';
char c2 = 'b';
fputc(c1, pf); //将字符a写入文件
putc(c2, pf); //将字符b写入文件
fclose(pf);
pf = NULL;
return 0;
}
二. 区别
从表面上看,fgetc和getc的功能相同,fputc和putc的功能相同,那他们的区别在哪里呢?
注意:fgetc和fputc本质上函数,而getc和putc本质上是宏!
更细的区别有以下三个:
- 调用宏(getc、putc)时,宏的参数不能是有副作用的表达式。有副作用的表达式,指的是表达式执行后,会改变表达式中某些变量的值,如++i。
- 函数可以获取其地址,并将其赋值给函数指针,而宏不可以获取地址。
- 调用宏的效率要高于调用函数。