fwrite函数,fread函数和fgets函数详解以及使用方法

article/2025/11/11 2:27:18

c/c++文件处理函数

1. fgets函数

函数原型

char *fgets(char *s, int size, FILE *stream);

参数解释:

  1. s 代表要保存到的内存空间的首地址,可以是字符数组名,也可以是指向字符数组的字符指针变量名。
  2. size 代表的是读取字符串的长度。
  3. stream 表示从何种流中读取,可以是标准输入流

当读到一个新行或者是一个EOF标志时,fgets()就会结束,并且这个函数会自动给末尾加’\0’。

fgets()读一次只读size个字节,而且其中把’\0’也包括在内。

2.fwrite 函数

  • 二进制文件读写两个重要的函数 , fread 和 fwrite , fread 用于读取文件 , fwrite 用于写出文件 ;

  • fread / fwrite 函数 既可以操作 二进制文件 , 又可以操作 文本文件 ;

  • getc / putc 函数 , fscanf / fprintf 函数 , fgets / fgets 函数 , 只能用于操作 文本文件 ;

函数原型 :

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

参数解释 :

const void *ptr : 指针指向要写出数据的内存首地址 ;

size_t size : 要写出数据的 基本单元 的字节大小 , 写出单位的大小 ;

size_t nmemb : 要写出数据的 基本单元 的个数 ;

FILE *stream : 打开的文件指针 ;

返回值说明 : size_t 返回值返回的是实际写出到文件的 基本单元 个数 ;

简单示例
#include <stdio.h>int main()
{// 使用 "wb" 二进制写的方式打开文件FILE *p = fopen("D:\\a.txt", "wb");// 用于写出数据的缓冲区char buffer[1024] = {0};// 设置缓冲区数值buffer[0] = 'H';buffer[1] = 'e';buffer[2] = 'l';buffer[3] = 'l';buffer[4] = 'o';// buffer : 将指针对应的内存的写出到文件中// sizeof(char) : 写出的基本单元字节长度// sizeof(buffer) : 写出的基本单元个数,//       写出字节个数是 sizeof(buffer) * sizeof(char)// p : 文件指针// 返回值 : fwrite 函数返回值表示写出到的 基本单元 的个数size_t count = fwrite(buffer, sizeof(char), 5, p);// 打印写出的内容和写出的 基本单元 个数printf("fread : buffer = %s , write count = %u\n", buffer, count);// 逐个字节打印读取出数据的 ASCII 码int i = 0;for(i = 0; i < count; i ++){printf("buffer[%d] = %x, %c\n", i, buffer[i], buffer[i]);}printf("Main End\n");return 0;
}

执行结果 :

fread : buffer = Hello , write count = 5
buffer[0] = 48, H
buffer[1] = 65, e
buffer[2] = 6c, l
buffer[3] = 6c, l
buffer[4] = 6f, o
Main End
fwrite 示例 ( 写出数据超出实际有效值 )

fwrite 函数示例 : 在上面的示例中 , 只给缓冲区设置了 5 55 个字节的数据 , 即 " Hello " 字符 , 只向文件写出 5 字节数据 ; 但是如果写出 20 个字节 , 就会将后续的 15 个字节的 ‘\0’ 也进行写出 ;

#include <stdio.h>int main()
{// 使用 "wb" 二进制写的方式打开文件FILE *p = fopen("D:\\a.txt", "wb");// 用于写出数据的缓冲区char buffer[1024] = {0};// 设置缓冲区数值buffer[0] = 'H';buffer[1] = 'e';buffer[2] = 'l';buffer[3] = 'l';buffer[4] = 'o';// buffer : 将指针对应的内存的写出到文件中// sizeof(char) : 写出的基本单元字节长度// sizeof(buffer) : 写出的基本单元个数,//       写出字节个数是 sizeof(buffer) * sizeof(char)// p : 文件指针// 返回值 : fwrite 函数返回值表示写出到的 基本单元 的个数size_t count = fwrite(buffer, sizeof(char), 20, p);// 打印写出的内容和写出的 基本单元 个数printf("fread : buffer = %s , write count = %u\n", buffer, count);// 逐个字节打印读取出数据的 ASCII 码int i = 0;for(i = 0; i < count; i ++){printf("buffer[%d] = %x, %c\n", i, buffer[i], buffer[i]);}printf("Main End\n");return 0;
}

运行结果:
在这里插入图片描述

3.fread函数

fread 函数作用 : 从文件中读取若干字节数据到内存缓冲区中 ;

fread 函数原型 :

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
  1. void *buffer 参数 : 将文件中的二进制数据读取到该缓冲区中 ;

  2. size_t size 参数 : 读取的 基本单元 字节大小 , 单位是字节 , 一般是 buffer 缓冲的单位大小 ;

    如果 buffer 缓冲区是 char 数组 , 则该参数的值是 sizeof(char) ;
    如果 buffer 缓冲区是 int 数组 , 则该参数的值是 sizeof(int) ;

  3. size_t count 参数 : 读取的 基本单元 个数 ;

  4. FILE *stream 参数 : 文件指针 ;

  5. size_t 返回值 : 实际从文件中读取的 基本单元 个数 ; 读取的字节数是 基本单元数 * 基本单元字节大小 ;

代码示例 : 一次性读满整个缓冲区 ;

#include <stdio.h>int main()
{// 使用 "rb" 读取二进制方式打开文件 a.txt:helloFILE *p = fopen("D:\\a.txt", "rb");// 用于接收读取数据的缓冲区char buffer[1024] = {0};// buffer : 将文件读取到内存的位置// sizeof(char) : 读取的基本单元字节长度// sizeof(buffer) : 读取的基本单元个数,//       读取字节个数是 sizeof(buffer) * sizeof(char)// p : 文件指针fread(buffer, sizeof(char), sizeof(buffer), p);// 打印读取的内容printf("buffer = %s\n", buffer); // buffer = helloprintf("Main End\n");return 0;
}

http://chatgpt.dhexx.cn/article/CdQDAt3U.shtml

相关文章

c语言 fread读指定字节,fread函数 c语言中fread函数怎么用

fread是一个函数,它从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回0。返回真实读取的项数,若大于count则意味着产生了错误。另外,产生错误后,文件位置指示器是无法确定的。若…

c语言fread函数,C语言“fread”函数的用法?

C语言“fread”函数的用法? C语言“fread”函数的用法为“size_tf read(void *buffer,size_t size,size_t count,FILE *stream)”,其作用是从一个文件流中读数据,读取count个元素,每个元素size字节。 示例1#include #include #include int main() {FILE *stream; char m…

【C 语言】文件操作 ( fread 函数 )

文章目录 一、fread 函数二、缓冲区受限的情况 ( 循环读取文件 | feof 函数判定文件读取完毕 )三、处理乱码问题四、记录读取的字节个数五、读取到 0 字节的情况六、读取完毕的情况七、读取文本文件 " " 与 读取二进制文件 " " 区别 二进制文件读写两个重…

Scala对象 转Json字符串

2019独角兽企业重金招聘Python工程师标准>>> import org.json4s.{Formats, NoTypeHints} import org.json4s.jackson.Serialization import org.json4s.jackson.Serialization.writeobject Json4sDemo {// 需要添加隐式转换implicit val formats: AnyRef with Forma…

【系统学习SpringBoot】SpringBoot 对象转JSON输出

SpringBoot输出JSON 以往使用SpringMVC中开发时&#xff0c;对象转JSON需要配置很多东西 【1】添加FastJson/jackjson等第三方jar 【2】在配置文件中配置Controller扫描 【3】给方法添加ResponseBody 配置FastJson还需要给配置文件中添加(很麻烦( ▼-▼ )) <mvc:annot…

【Java 笔记】使用Fastjson2时,对象转json首字母大小写问题

开发环境&#xff1a; Spring cloud Fastjson2 一、JSON 转 Object 推送第三方数据时&#xff0c;对方http接口消息体为json&#xff0c;但是字段首字母大写 我们需要接收JSON 转 Object [ { "ItemCode": "WIND_SPEED", "ItemValue": "2.1…

js 数组、对象转json 以及json转 数组、对象

1、JS对象转JSON 方式&#xff1a;JSON.stringify(obj) var json {"name":"iphone","price":666}; //创建对象&#xff1b; var jsonStr JSON.stringify(json); //转为JSON字符串 console.log(jsonStr);2、JS数组转JSON //数组转json…

对象转JSON首字母大写

最近在做一个第三方接口&#xff0c;接口给的数据类型如下 请求报文如下 {"A0144":"12141256","AB6AM":"中国银行支行","STATUS":1} 一般按照对象转JSON会使首字母小写&#xff0c;与接口文档不相符&#xff0c;因此需要…

Object对象转实体对象,java对象转json

Object对象转实体对象 在后台发起HTTP请求的时候&#xff0c;响应体传回的一般是Object或者JSON字符串。 方法一 要将Object对象转换成实体类对象可以先使用com.alibaba.fastjson.JSONObject类的toJSONString方法将Object对象转换成JSON字符串&#xff0c;然后再调用JSONObj…

对象 和 json 互转 四种方式 json-lib、Gson、FastJson、Jackson

文章目录 一、 json-lib二、 Google的Gson1.简介2. 配置步骤1. MAVEN 依赖引入2. gsonUtil 工具类3. 排除不要序列化的熟悉注解类 Exclude 三. 阿里巴巴的FastJson1.简介2.配置步骤1.引入maven2. 配置 CustomFastjsonConfig3. 测试 4. 开源的Jackson简介&#xff1a;Jackson配置…

大数据Java学哪个好,哪个更有发展前景?

文章来源&#xff1a;加米谷大数据 在IT职业技能培训当中&#xff0c;Java开发可以说是非常经典的一个方向&#xff0c;行业当中对于Java开发人才&#xff0c;早年可以是存在长期持续性的需求。而大数据&#xff0c;作为近年来的新兴技术热点&#xff0c;也同样备受关注。因此很…

大数据Java基础之常用类

欢迎关注公众号&#xff1a; 9-1 字符串相关的类 String常用方法 9-2 JDK8之前日期时间API 9-4 Java比较器 9-5 System类 9-6 Math类 9-7 BigInteger与BigDecimal

Java毕设项目医疗大数据系统计算机(附源码+系统+数据库+LW)

Java毕设项目医疗大数据系统计算机&#xff08;附源码系统数据库LW&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

方向选择(嵌入式 大数据 java)

时间匆匆&#xff0c;不知不觉大二后半期了。晚上开了会要确定方向选择&#xff0c;嵌入式&#xff0c;大数据&#xff0c;java三个方向。 犹豫了好久&#xff0c;因为学了一段时间的java还是偏向于java的 不过也想学大数据&#xff0c;因为最近很火 大家都 知道的。现在来简…

大数据入门:Java和Scala编程对比

在学习大数据之初&#xff0c;很多人都会对编程语言的学习有疑问&#xff0c;比如说大数据编程主要用什么语言&#xff0c;在实际运用当中&#xff0c;大数据主流编程是Java&#xff0c;但是涉及到Spark、Kafka框架&#xff0c;还需要懂Scala。今天的大数据入门分享&#xff0c…

视频教程-大数据Java强化班(十)之大数据爬虫-Java

大数据Java强化班(十)之大数据爬虫 10年一线开发及项目管理经验&#xff0c;6年以上大数据项目架构、实施、开发与运维经验&#xff0c;骨灰级大数据玩家&#xff0c;对Hadoop、Storm、Spark、Flink、Kylin、Druid等大数据技术有较深研究。搭建、维护过上百节点集群&#xff0c…

Java大数据开发

(后记&#xff1a;写这些东西不管出于什么目的&#xff0c;总之自己乐意&#xff0c;有时候回顾一下&#xff0c;别有一番滋味&#xff01;) 博主 QQ&#xff1a;1103088881 idea 从菜鸟到大神 css-3d旋转相册 时钟罗盘 Java学习方法总结 Java 面向对象 …

大数据用Python还是JAVA

前言 大数据用python还是java?书声琅琅教育番茄老师介绍&#xff0c;人生苦短&#xff0c;我用python&#xff0c;这是目前比较流行的行话了&#xff0c;对于用python好还是JAVA好&#xff0c;大家都有自己的看法&#xff0c;虽然JAVA流行时间较&#xff0c;但是python出现的…

Java及大数据学习路线

1.Java学习路线 1.1JavaSE Java基础 Java8新特性 数据库MySQL与SQL语言 JDBC 1.2JavaWeb HTML基础与CSS JavaScript DOM 与 jQuery XML与Tomcat HTTP协议 服务器端组件Servlet JSP EL表达式 JSTL 会话控制Cookie和Session 服务器端组件Filter 服务器端组件Listener 国际化 …