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

【C语言】文本操作函数fgetc、fputc、fgets、fputs、fprintf、fscanf、fread、fwrite

一、介绍

二、简要概括

三、函数的使用 

1、fgetc和fputc

int fgetc ( FILE * stream ); 

从文件中读取信息,每次读取一个字符

  • 从流中获取字符
  • 返回指定流的内部文件位置指示符当前指向的字符。然后将内部文件位置指示符推进到下一个字符
int main()
{//打开文件FILE * pf = fopen("data.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读文件int ch = fgetc(pf);printf("%c", ch);//关闭文件fclose(pf);pf = NULL;return 0;
}



int fputc ( int character, FILE * stream );

从建盘中输入信息到文件中,每次输入一个字符

  • 将字符写入流
  • 将一个字符写入流并推进位置指示器
  • 字符被写入流的内部位置指示器所指示的位置,然后自动向前移动一个
int main()
{//打开文件FILE* pf = fopen("data.txt", "w");if (pf == NULL){perror("fopen");return 1;}//写文件fputc("a", pf);//关闭文件fclose(pf);pf = NULL;return 0;
}

2、fgets和fputs

char * fgets ( char * str, int num, FILE * stream );

从文件中读取信息,每次读取一个字符串

  • 从流中获取字符串
  • 从流中读取字符,并将其作为C字符串存储到 str 中,直到读取 (num-1) 个字符,或者到达换行符或文件结束符
  • 换行符使 fgets 停止读取,但它被函数认为是一个有效字符,并包含在复制到 str 的字符串中。
  • 在复制到 str 的字符之后,将自动追加一个终止 null 字符。
  • 请注意,fgets 与 gets 有很大的不同:fgets 不仅接受流参数,而且允许指定 str 的最大长度,并在字符串中包含任何结束换行符
int main()
{//打开文件FILE * pf = fopen("data.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读文件char arr[100] = { 0 };fgets(arr,5, pf);printf("%s", arr);//关闭文件fclose(pf);pf = NULL;return 0;
}


int fputs ( const char * str, FILE * stream );

从建盘中输入信息到文件中,每次输入一个字符串

  • 将字符串写入流
  • 将由 str 指向的C字符串写入流
  • 函数从指定的地址 (str) 开始复制,直到到达结束的空字符 ('\0'),这个终止的空字符不会复制到流中
int main()
{//打开文件FILE* pf = fopen("data.txt", "w");if (pf == NULL){perror("fopen");return 1;}//写文件fputs("abcde\n", pf);char arr[10] = "efghi";fputs(arr, pf);//关闭文件fclose(pf);pf = NULL;return 0;
}

3、fprintf和fscanf

int fprintf ( FILE * stream, const char * format, ... );

将有格式的数据转换为字符串并且写入文件

  • 将格式化的数据写入流
  • 将由 format 指向的 C字符串写入流。如果 format 包含格式说明符(以%开头的子序列),则格式化format 之后的其他参数并将其插入到结果字符串中,以替换它们各自的说明符。
struct S
{char name[10];int age;float score;
};int main()
{struct S s = { "zhangsan",18,94.5};FILE* pf = fopen("data.txt", "w");//打开文件if (pf == NULL){perror("fopen");return 1;}//读文件fprintf(pf, "%s %d %f", s.name, &(s.age), &(s.score));//关闭文件fclose(pf);pf = NULL;return 0;
}

int fscanf ( FILE * stream, const char * format, ... );

将文件中的字符串转换为有格式的数据并且读取出来

  • 从流中读取格式化的数据
  • 从流中读取数据,并根据参数格式将其存储到附加参数所指向的位置
  • 额外的参数应该指向已经分配的对象,其类型由格式字符串中相应的格式说明符指定
struct S
{char name[10];int age;float score;
};int main()
{struct S s = { 0 };FILE* pf = fopen("data.txt", "r");//打开文件if (pf == NULL){perror("fopen");return 1;}//读文件fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));printf("%s %d %f", s.name, s.age, s.score);//关闭文件fclose(pf);pf = NULL;return 0;
}

4、fread和fwrite

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

将文件中的内容转换为二进制然后读取出来

  • 从流中读取数据块
  • 从流中读取一个由 count 元素组成的数组,每个元素的大小为 size 字节,并将它们存储在 ptr 指定的内存块中
  • 流的位置指示器按读取的总字节数前进
  • 如果成功读取的总字节数为 (size*count) 
  • 以二进制的方式读取文件
//二进制的方式读取文件
int main()
{int arr[10] = {0};//写文件FILE* pf = fopen("data.txt", "rb");if (pf == NULL){perror("fopen");return 1;}//二进制的读文件fread(arr, sizeof(arr[0]), sizeof(arr) / sizeof(arr[0]), pf);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}//关闭文件fclose(pf);pf = NULL;return 0;
}

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

将数据转换为二进制然后写入文件

  • 将数据块写入流
  • 将由 count 元素组成的数组 (每个元素的大小为 size 字节) 从 ptr 所指向的内存块写入流中的当前位置
     
  • 流的位置指示器按写入的总字节数前进
  • 在内部,该函数将 ptr 指向的块解释为 unsigned char 类型的 (size*count) 元素数组,并将它们顺序写入流,就像对每个字节调用 fputc 一样
//二进制的方式写进文件
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//写文件FILE*pf = fopen("data.txt", "wb");if (pf == NULL){perror("fopen");return 1;}//二进制的写文件fwrite(arr, sizeof(arr[0]), sizeof(arr)/sizeof(arr[0]), pf);//关闭文件fclose(pf);pf = NULL;return 0;
}

相关文章:

  • 【Linux应用】RADXA ZERO 3快速上手:镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互
  • JavaEE学习笔记(第二课)
  • linux磁盘挂载
  • 【25软考网工】第三章(2)以太网帧结构与封装、以太网物理层标准
  • Java 集合:泛型、Set 集合及其实现类详解
  • 信息系统项目管理工程师备考计算类真题讲解六
  • 用交换机连接两台电脑,电脑A读取/写电脑B的数据
  • 榜单持久化
  • python实战项目63:获取腾讯招聘信息内容并进行统计分析
  • Windows 各版本查找计算机 IP 地址指南
  • Elasticsearch(ES)中的脚本(Script)
  • 【人工智能】Ollama 负载均衡革命:多用户大模型服务的高效调度与优化
  • WT2000T专业录音芯片:破解普通录音设备信息留存、合规安全与远程协作三大难题
  • web刷题笔记
  • 代码分享:python实现svg图片转换为png和gif
  • 【计算机视觉】CV项目实战- SORT 多目标跟踪算法
  • 【模板匹配】图像处理(OpenCV)-part10
  • 学习海康VisionMaster之卡尺工具
  • 操作系统学习笔记
  • Representation Flow for Action Recognition论文笔记
  • 特写|“三峡千古情”出圈,一场演出给宜昌留下更多游客
  • 与包乐史驾帆航行|航海、钓鱼和写书:一个记者的再就业之路
  • 上海车展上的双向奔赴:跨国车企融入中国创新,联手“在中国,为全球”
  • 宁德时代与广汽等五车企发布10款巧克力换电新车型:年内将将完成30城1000站计划
  • 被电诈100万元又要被骗71万元,女子经民警近8小时劝阻幡然醒悟
  • 外交部:中方近日派出停火监督组赴缅,监督缅军和果敢同盟军停火