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

image

 

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 - 格式化文本读取

选择函数时要根据具体的读取需求来决定。

 

posted @ 2025-08-31 20:32  量子我梦  阅读(10)  评论(0)    收藏  举报