C语言中的fread和fwrite是专门用来操作文件的方法。

1. fread负责从打开的文件指针中读取文件内容。

函数原型:size_t fread(void *p, size_t size, size_t num, FILE *fp);

参数*p:一个指针,通常是字符串指针,也可以是一个数组,用来存放从文件流中读取的数据;

参数size:表示读取一个单位元素的大小,以字节为单位,比如sizeof(char)或者sizeof(int)等;

参数num:表示一次单位元素的数量,和size参数一样,都是无符号整数类型;

参数*fp:当然就是文件流指针了,即我们需要操作的文件;

返回值:正常情况下,返回成功读取的单位元素的数目,这个值小于等于我们传入的参数num。如果发生错误或者遇到文件结尾,返回0。这个时候我们可以用feof和ferror函数去检查到底发生了什么情况。

2. fwrite和fread相对应,负责将准备好的数据写入到文件流中。通常情况下,这个函数执行完的时候,只是将数据写入了缓存,磁盘的文件中并不会立即出现刚刚写入的数据,在调用fclose之后,计算机才将缓存中的数据写入磁盘。

函数原型:size_t fwrite(void *p, size_t size, size_t num, FILE *fp);

fwrite和fread的参数要表达的意思是一样的,不同的是将*p中的数据写入到文件流中,以及返回值表示成功写入的数目。

简单列子:将一个文件的内容拷贝到另一个文件中

#include <stdio>

int main(void)

{

  // 读模式的方式打开第一个文件流,并且以二进制流的方式。由于二进制的方式,C语言不进行任何转换,所以如果在windows下,该方式会看到行结尾符由一个\r\n两个字符组成;在linux下则只有一个\n;在苹果机下面则是\r;如果以文本方式打开(不加b的模式),C语言在调用fread的时候会将文本视图的行尾符统一转化成\n,然后在调用fwrite的时候再根据操作系统转化成相应的行尾符。

  FILE *fp1 = fopen("text1.txt", "rb");

  if (!fp1)

    printf("The text1.txt open failed!");

  FILE *fp2 = fopen("text2.txt", "wb");

  if (!fp2)

    printf("The text2.txt open failed!"); 

  // 动态申请20个char类型大小的内存空间,由于char是字符串指针,所以最多存放19个字符,因为最后一个字符必须是结束符‘\0’。相反的,如果写入text的字符串的长度超过了19,即text的第20个字节的位置无法存入‘\0’结束符,就会造成越界,这时候多出来的数据就会占据后面紧接的内存。越界后,如果再答应text, C语言就会一直打印到找到第一个'\0'为止,实际text的字符长度就会大于20。所以text一定要有足够大的空间来存储一次读取的数据块大小。

  char *text = (char *)calloc(20, sizeof(char));

  if (!feof(fp1) && !ferror(fp1))

  {

    size_t num = fread(*text, sizeof(char), 19, *fp1);

    fwrite(*text, sizeof(char), num, *fp2);

  } 

  fclose(fp1);

  fclose(fp2);

}

C语言中的fread和fwrite的更多相关文章

  1. C语言中access、_mkdir、sprintf、 fopen、fwrite函数

    int access(const char *filename, int amode); amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-. 这个函数还可以检查其它文件属 ...

  2. C语言中file文件指针概念及其操作 (转载)

    文件 文件的基本概念 所谓"文件"是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件. ...

  3. 转]解析C语言中的sizeof

    解析C语言中的sizeof 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出 了其操作数的存储大小.操作数 ...

  4. C语言中,头文件和源文件的关系(转)

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...

  5. C 语言中 setjmp 和 longjmp

    在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处:但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转.后面我们会看到这两个函数在处理异常 ...

  6. c语言中的scanf在java中应该怎么表达,Scanner类。

    1 java是面向对象的语言 它没有像C语言中的scanf()函数,但是它的类库中有含有scanf功能的函数 2 java.util包下有Scanner类 Scanner类的功能与scanf类似 3 ...

  7. C语言中do...while(0)的妙用(转载)

    转载来自:C语言中do...while(0)的妙用,感谢分享. 在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个: 1.避免goto语 ...

  8. C语言中,定义的含义?声明的含义?它们之间的区别是什么?

    在C语言中,对于定义和声明,也许我们非常的熟悉,但不一定真正的了解! 定义的含义:所谓定义,就是创建(编译器)一个对象,为这个对象分配一块内存空间并取名,也就是我们平常所说的变量名或对象名,一旦这个名 ...

  9. C++中函数的默认参数和C语言中volatile的学习

    1.函数默认参数 1 int func(int a,int b=10) 2 { 3 return a*b; 4 } 5 6 int main() 7 { 8 int c=func(2); 9 cout ...

随机推荐

  1. Hadoop学习2--Linux准备及环境准备

    1.环境安装: 虚拟机:VMware Player 系统:Ubuntu12 注意事项:注意位数,包括系统,java,Hadoop 2.切换账号 当前登录账号是自己的账号,如果想切换到root,且是第一 ...

  2. BPEL_Oracle BPEL新一代工作流介绍(概念)

    2014-11-02 Created By BaoXinjian

  3. HTML document对象(2)

    五.相关元素操作: var a = document.getElementById("id");找到a: var b = a.nextSibling,找a的下一个同辈元素,注意包含 ...

  4. Android屏幕适配建议

    一.关于布局适配 1.不要使用绝对布局 2.尽量使用match_parent 而不是fill_parent . 3.能够使用权重的地方尽量使用权重(android:layout_weight) 4.如 ...

  5. Python2.7.5 安装(转载)

    From:http://www.cnblogs.com/balaamwe/p/3480430.html From:http://www.chgon.com/?p=1340 安装python2.7.5纠 ...

  6. memcached完全剖析–1. memcached的基础

    系列文章导航: memcached完全剖析–1. memcached的基础 memcached全面剖析–2. 理解memcached的内存存储 memcached全面剖析–3. memcached的删 ...

  7. Python中用datetime包进行对时间的一些操作

    1. 计算给出两个时间之间的时间差 import datetime as dt # current time cur_time = dt.datetime.today() # one day pre_ ...

  8. python argparse模块解析命令行选项简单使用

    argparse模块的解析命令行选项简单使用 util.py #!/usr/bin/env python # coding=utf-8 import argparse parser = argpars ...

  9. Oracle迁移MySQL笔记

    1,--在oracle代表注释 ,mysql/* */,# 2,|| oracle里面是表示连接符号,比如 A||B 那么就是AB 3,databaseLink创建好之后,比如名字为db_link_b ...

  10. 01- 使用brew 安装ant -学习笔记(一)

    1.卸载Mac OS下brew工具:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mast ...