当前位置: 首页 > news >正文

C语言文件操作函数详解

目录

引言

一、文件操作函数分类概述

二、字符输入输出函数

         三、文本行输入输出函数

四、格式化输入输出函数

五、二进制输入输出函数

         六、总结


引言



 
在C语言编程中,文件操作是一项非常重要的技能。无论是处理配置文件、记录日志,还是存储和读取数据,都离不开文件操作。本文将详细介绍C语言中常用的文件操作函数,帮助大家更好地理解和运用这些函数。

 



一、文件操作函数分类概述


C语言提供了丰富的文件操作函数,根据功能可大致分为字符输入输出、文本行输入输出、格式化输入输出以及二进制输入输出函数,这些函数在不同的输入输出场景下发挥着作用。
 



二、字符输入输出函数



2.1 fgetc函数
 
 fgetc 函数用于从指定的输入流中读取一个字符。它适用于所有输入流,包括标准输入流 stdin 和文件输入流。函数原型为 int fgetc(FILE *stream) ,返回值为读取到的字符(以 int 类型表示),当读取到文件末尾或发生错误时,返回 EOF (-1)。



 ...c
#include <stdio.h>
int main() {
    FILE *fp = fopen("test.txt", "r");
    if (fp != NULL) {
        int ch = fgetc(fp);
        while (ch != EOF) {
            putchar(ch);
            ch = fgetc(fp);
        }
        fclose(fp);
    }
    return 0;
}
 ...



 
2.2 fputc函数
 
 fputc 函数用于向指定的输出流写入一个字符,适用于所有输出流。函数原型是 int fputc(int c, FILE *stream) ,返回值为写入的字符,如果写入失败则返回 EOF 。
 



...c
#include <stdio.h>
int main() {
    FILE *fp = fopen("test.txt", "w");
    if (fp != NULL) {
        fputc('H', fp);
        fputc('e', fp);
        fputc('l', fp);
        fputc('l', fp);
        fputc('o', fp);
        fclose(fp);
    }
    return 0;
}
 ...
 



三、文本行输入输出函数
 



3.1 fgets函数
 
 fgets 函数从输入流中读取一行字符,它会读取到换行符或者达到指定的字符数限制为止。原型为 char *fgets(char *str, int num, FILE *stream) ,返回值为指向读取到的字符串的指针,如果读取失败或到达文件末尾则返回 NULL 。
 



...c
  
#include <stdio.h>
int main() {
    FILE *fp = fopen("test.txt", "r");
    char buffer[100];
    if (fp != NULL) {
        while (fgets(buffer, sizeof(buffer), fp) != NULL) {
            printf("%s", buffer);
        }
        fclose(fp);
    }
    return 0;
}
 ...



3.2 fputs函数
 
 fputs 函数用于向输出流写入一个字符串,不包括字符串末尾的空字符 \0 。函数原型为 int fputs(const char *str, FILE *stream) ,成功时返回非负值,失败时返回 EOF 。
 



...c
  
#include <stdio.h>
int main() {
    FILE *fp = fopen("test.txt", "w");
    const char *str = "Hello, world!";
    if (fp != NULL) {
        fputs(str, fp);
        fclose(fp);
    }
    return 0;
}
 ...
 



四、格式化输入输出函数
 



4.1 fscanf函数
 
 fscanf 函数从输入流中按照指定的格式读取数据,适用于所有输入流。原型为 int fscanf(FILE *stream, const char *format, ...) ,返回值为成功匹配和赋值的输入项的个数。
 



...c
  
#include <stdio.h>
int main() {
    FILE *fp = fopen("data.txt", "r");
    int num;
    if (fp != NULL) {
        fscanf(fp, "%d", &num);
        printf("读取到的数字: %d\n", num);
        fclose(fp);
    }
    return 0;
}
 ...
 



4.2 fprintf函数
 
 fprintf 函数将数据按照指定格式输出到输出流中。函数原型是 int fprintf(FILE *stream, const char *format, ...) ,返回值为实际输出的字符数,若出错则返回负值。
 



...c
#include <stdio.h>
int main() {
    FILE *fp = fopen("data.txt", "w");
    int num = 100;
    if (fp != NULL) {
        fprintf(fp, "数字是: %d", num);
        fclose(fp);
    }
    return 0;
}
 ...
 



五、二进制输入输出函数
 



5.1 fread函数
 
 fread 函数用于从文件中读取二进制数据。原型为 size_t fread(void *ptr, size_t size, size_t count, FILE *stream) ,返回值为实际读取的完整项数。
 



...c
#include <stdio.h>
struct Data {
    int num;
    float fnum;
};
int main() {
    FILE *fp = fopen("data.bin", "rb");
    struct Data data;
    if (fp != NULL) {
        fread(&data, sizeof(struct Data), 1, fp);
        printf("读取到的整数: %d, 浮点数: %f\n", data.num, data.fnum);
        fclose(fp);
    }
    return 0;
}
 ...
 



5.2 fwrite函数
 
 fwrite 函数用于向文件中写入二进制数据。函数原型是 size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream) ,返回值为实际写入的完整项数。
 



...c
  
#include <stdio.h>
struct Data {
    int num;
    float fnum;
};
int main() {
    FILE *fp = fopen("data.bin", "wb");
    struct Data data = {10, 3.14};
    if (fp != NULL) {
        fwrite(&data, sizeof(struct Data), 1, fp);
        fclose(fp);
    }
    return 0;
}
 ...
 



六、总结



 
C语言的文件操作函数为我们提供了强大而灵活的文件处理能力。通过合理运用这些函数,我们可以轻松地实现各种文件相关的功能。在使用时,要注意文件的打开模式、函数的返回值以及错误处理,以确保程序的稳定性和正确性。希望本文能对大家在C语言文件操作方面有所帮助。
 

相关文章:

  • Dify部署无法拉取镜像
  • Leaflet介绍及使用示例
  • MySQL 中如何查看 SQL 的执行计划?
  • 支持selenium的chrome driver更新到133.0.6943.141
  • Java 内存泄漏排查指南:工具与实战技巧
  • 【EB-06】SystemCreator dbc转arxml
  • 网络安全内参
  • Spring Boot启动过程?
  • C语言 第一章 认识C语言
  • HD接口 和HDMI接口是一个意思么
  • python-leetcode-划分字母区间
  • 子组件如何通过v-model实现数据的双向绑定
  • 互联网怎样利用人性-思维导图-markdown
  • Selenium 调用模型接口实现功能测试
  • C++ Primer 成员访问运算符
  • python学习五
  • 深入理解 并查集LRUCaChe
  • CUDA编程:对线程模型的理解
  • HDFS扩缩容及数据迁移
  • 使用 LangChain 和 Milvus 构建测试知识库
  • 3477亿美元!伯克希尔一季度现金储备再创新高,担忧关税战不确定性影响
  • AI把野史当信史?警惕公共认知的滑坡
  • 经济日报社论:书写新征程上奋斗华章
  • 神舟十九号载人飞行任务取得圆满成功
  • 发挥全国劳模示范引领作用,加速汽车产业电智化转型
  • 俄乌战火不熄,特朗普在梵蒂冈与泽连斯基会晤后口风突变