getc - 单字符读取 fgets - 字符串/行读取 fread - 二进制数据读取 fscanf - 格式化文本读取

C语言文件操作函数详解
1. fgets函数
函数原型:
char *fgets(char *str, int n, FILE *stream);
功能:
- 从指定的文件流中读取一行字符串
- 最多读取 n-1 个字符(保留一个位置给结尾的'\0')
- 遇到换行符'\n'时停止读取,换行符也会被包含在字符串中
- 自动在字符串末尾添加'\0'
特点:
- 安全性高,不会发生缓冲区溢出
- 保留换行符
- 适合逐行读取文本文件
2. fread函数
函数原型:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
功能:
- 从文件流中读取指定数量的数据块
- size:每个数据块的字节数
- count:要读取的数据块数量
- 总共读取 size × count 个字节
特点:
- 主要用于二进制文件操作
- 可以读取任意类型的数据(整数、结构体等)
- 不会自动添加字符串结束符
- 返回实际读取的数据块数量
3. fscanf函数
函数原型:
int fscanf(FILE *stream, const char *format, ...);
功能:
- 根据指定的格式从文件中读取格式化数据
- 类似于scanf,但从文件而不是标准输入读取
- 可以读取不同类型的数据(整数、浮点数、字符串等)
特点:
- 按格式解析文本文件
- 遇到空白字符(空格、制表符、换行符)时会跳过
- 适合读取结构化的文本数据
4. getc函数
函数原型:
int getc(FILE *stream);
功能:
- 从指定文件流中读取一个字符
- 返回读取的字符的ASCII值
- 到达文件末尾时返回EOF
特点:
- 每次只读取一个字符
- 通常实现为宏,执行效率较高
- 适合逐字符处理文件内容
答案分析
根据题目描述"从fp所指向的文件中读入一个字符赋给ch",正确答案是:
D. getc
理由:
- fgets:读取字符串(一行),不是单个字符
- fread:读取数据块,主要用于二进制文件
- fscanf:格式化读取,功能过于复杂
- getc:专门用于读取单个字符,完全符合题意
示例代码
#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return -1;
}
char ch;
ch = getc(fp); // 从文件中读取一个字符
printf("读取的字符是: %c\n", ch);
fclose(fp);
return 0;
}
总结
这四个函数各有不同的用途:
- getc - 单字符读取
- fgets - 字符串/行读取
- fread - 二进制数据读取
- fscanf - 格式化文本读取
选择函数时要根据具体的读取需求来决定。

浙公网安备 33010602011771号