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;
}

fwrite函数,fread函数和fgets函数详解以及使用方法相关推荐

  1. 【python教程入门学习】Python函数定义及传参方式详解(4种)

    这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...

  2. 定时器 槽函数没执行_Web服务器项目详解 07 定时器处理非活动连接(上)

    点击"两猿社" 关注我们 Web服务器详解目录 00 项目概述 01 线程同步机制包装类 02 半同步/半反应堆线程池(上) 03 半同步/半反应堆线程池(下) 04 http连接 ...

  3. php 查找键名,array_key_exists()函数搜索数组键名步骤详解

    这次给大家带来array_key_exists()函数搜索数组键名步骤详解,array_key_exists()函数搜索数组键名的注意事项有哪些,下面就是实战案例,一起来看一下. array_key_ ...

  4. Find_in_set()函数的使用及in()用法详解

    这篇文章主要介绍了mysql中find_in_set()函数的使用以及in()用法详解,需要的朋可以参考下 MySQL手册中find_in_set函数的语法解释: FIND_IN_SET(str,st ...

  5. Python函数(函数定义、函数调用)用法详解

    函数 函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码. 函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码.函数还可以接 ...

  6. linux中date使用方法,linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例)...

    linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例) 发布于 2016-02-07 15:58:40 | 108 次阅读 | 评论: 0 | 来源: 网友投递 LinuxLinux是一 ...

  7. C语言中三个数比较大小详解——三种方法

    ​ C语言中三个数比较大小详解--三种方法 方法一:if-else法 方法二:函数法 方法三:三目运算符法 C语言中比较三个数的大小有很多方法,以下是我总结的三种方法: 首先我定义 int a = 1 ...

  8. findindex遍历 js_详解ES6数组方法find()、findIndex()的总结

    本文主要讲解ES6数组方法find()与findIndex(),关于JS的更多数组方法,可参考以下: 1. find() 该方法主要应用于查找第一个符合条件的数组元素,即返回通过测试(函数内判断)的数 ...

  9. PHP开发中常见的安全问题详解和解决方法

    PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...

  10. csrf漏洞防御方案_CSRF 漏洞原理详解及防御方法

    跨站请求伪造:攻击者可以劫持其他用户进行的一些请求,利用用户身份进行恶意操作. 例如:请求http://x.com/del.php?id=1是一个删除ID为1的账号,但是只有管理员才可以操作,如果攻击 ...

最新文章

  1. 循环神经网络(RNN, Recurrent Neural Networks)——无非引入了环,解决时间序列问题...
  2. c语言重定义不同的基类型_简述usb连接器输出类型定义和不同环境下的用法
  3. 灰度图像的对数变换原理及OpenCV代码实现
  4. CTFshow 命令执行 web36
  5. maven生成jar,运行却提示没有“没有主清单属性”
  6. java java se_Java 8 SE可选,严格的方法
  7. php 获取文件给用户下载,php 下载文件/直接下载数据内容
  8. php置顶文章,zblogphp不同情况置顶文章调用方法
  9. 原生jsonp发送跨域请求
  10. Python自动化办公 | 补写178份Word日报!
  11. 个人CTF入门训练过程WriteUp
  12. pc端js在线预览Word、Excel
  13. echarts地图各种点位实现
  14. 英语拼写鉴别器_CodingPark编程公园
  15. 盛大开业!三星生活家电体验馆正式入驻红星美凯龙
  16. 小程序uni-app介绍
  17. GDScript:协程(Coroutine)(二)简单粗暴实用至上的语法设计
  18. python 删除excel空行_Java 删除 Excel 中的空白行和列
  19. cef ocx 支持_Cef3/Chromium的编译和音视频支持的修改
  20. OCR开源库Tesseract汉字识别训练

热门文章

  1. CST 2022时间如何格式化
  2. uniapp的web-view 无法自由缩放(已解决)
  3. Java中常用的API
  4. Asp.Net Web控件 (五)(可分页Repeater的使用)
  5. SEO做外链Outreach邮件回复低,怎么办?
  6. PayPal,Stripe,Square轮询支付系统
  7. c++加减乘除计算器
  8. Mycat安装、配置与实践(兼容mysql8)
  9. 三种架构模式——MVC、MVP、MVVM
  10. 每天十分钟学好ES6--关于解构赋值的彩虹屁