c语言fread函数的用法示例,C语言中fread,C语言文件操作之fread函数详解

c语言fread函数的用法示例,C语言中fread,C语言文件操作之fread函数详解

函数的作用是:从指定的文件中读取块数据。下面文章主要介绍C语言文件操作的fread函数的相关信息。通过示例代码详细介绍,有需要的朋友可以参考一下。

目录

前言1、fread函数2、缓冲区限制(循环读取文件| feof函数确定文件读取完毕)3、处理乱码问题4、记录读取的字节数5、读取0字节6、读取完毕7、总结读取文本文件“\n”和读取二进制文件“\r\n”的区别

前言

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

Fread/fwrite函数既可以操作二进制文件,也可以操作文本文件;

Getc/putc函数、fscanf/fprintf函数、fgets/fgets函数只能用来操作文本文件;

一、fread 函数

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

fread 函数原型 :

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

void *buffer 参数 :将文件中的二进制数据读入这个缓冲区;

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

如果buffer缓冲区是一个char数组,这个参数的值是sizeof(char);如果buffer buffer是一个int数组,那么这个参数的值就是sizeof(int);

size_t count 参数 :基本单位数读取;

FILE *stream 参数 :文件指针;

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

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

#包含stdio.h

int main()

{

//使用“rb”读取二进制文件以打开文件

FILE *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);

printf(' Main End \ n ');

返回0;

}

执行结果:

二、缓冲区受限的情况 ( 循环读取文件 | feof 函数判定文件读取完毕 )

假设缓冲区小,文件大,需要循环读取文件数据;

使用feof(p)确定文件是否已被读取;如果返回true,说明文件没有被读取;如果返回false,则表示文件已被读取;

代码示例 :

#包含stdio.h

int main()

{

//使用“rb”读取二进制文件以打开文件

FILE *p=fopen('D:\\a.txt ',' Rb ');

//接收读取数据的缓冲区

char buffer[4]={ 0 };

而(!feof(p)){

memset(buffer,0,sizeof(buffer))。

//buffer:文件读入内存的位置

//sizeof(char):读取基本单元的字节长度。

//sizeof(buffer):读取的基本单位数,

//读取的字节数是sizeof(buffer) * sizeof(char)

//p:文件指针

fread(buffer,sizeof(char),sizeof(buffer),p);

//打印读取的内容

printf('buffer=%s\n ',buffer);

}

printf(' Main End \ n ');

返回0;

}

执行结果 :看完乱码。这是因为每次读取10 ^ 10 ^ 10字节,但字符串必须以' \ 0 '结尾。如果没有' \ 0 ',您将一直读到' \ 0 '字符串的结尾出现。

三、处理乱码问题

为了避免乱码打印,char buffer[4]={ 0 };准备了一个4 ^ 4的4字节缓冲区,每次只用3 ^ 3 ^ 3字节,可以保证最后一个字节一定是' \ 0 ',打印时不会出现乱码;

代码示例:

#包含stdio.h

int main()

{

//使用“rb”读取二进制文件以打开文件

FILE *p=fopen('D:\\a.txt ',' Rb ');

//接收读取数据的缓冲区

char buffer[4]={ 0 };

而(!feof(p)){

memset(buffer,0,sizeof(buffer))。

//buffer:文件读入内存的位置

//sizeof(char):读取基本单元的字节长度。

//sizeof(buffer):读取的基本单位数,

//读取的字节数是sizeof(buffer) * sizeof(char)

//p:文件指针

fread(buffer,sizeof(char),sizeof(buffer) - 1,p);

//打印读取的内容

printf('buffer=%s\n ',buffer);

}

printf(' Main End \ n ');

返回0;

}

执行:每次从文件中读取缓冲区的字节数-1字节,就可以完整地打印出文本;

四、记录读取的字节个数

fread函数的返回值表示读取的基本单位数。如果设置了1KB的缓冲区,但文件中只有5个字节,则fread的返回值是实际读取的数据数。

代码示例:

#包含stdio.h

int main()

{

//使用“rb”读取二进制文件以打开文件

FILE *p=fopen('D:\\a.txt ',' Rb ');

//接收读取数据的缓冲区

char buffer[1024]={ 0 };

//buffer:文件读入内存的位置

//sizeof(char):读取基本单元的字节长度。

//sizeof(buffer):读取的基本单位数,

//读取的字节数是sizeof(buffer) * sizeof(char)

//p:文件指针

//返回值:fread函数的返回值表示读取的基本单位数。

size_t count=fread(buffer,sizeof(char),sizeof(buffer) - 1,p);

//打印读取的内容

printf('buffer=%s,读取计数=%u\n ',buffer,count);

printf(' Main End \ n ');

返回0;

}

执行结果:

五、读取到 0 字节的情况

如果基本单元大小为4 ^ 4 ^ 4字节,文件中只有3 ^ 3 ^ 3字节的数据,那么使用fread函数读取文件,缓冲区设置为1KB,那么实际读取的基本单元数为0 ^ 0 ^ 0;

代码示例:

#包含stdio.h

int main()

{

//使用“rb”读取二进制文件以打开文件

FILE *p=fopen('D:\\a.txt ',' Rb ');

//接收读取数据的缓冲区

char buffer[1024]={ 0 };

//buffer:文件读入内存的位置

//sizeof(char):读取基本单元的字节长度。

//sizeof(buffer):读取的基本单位数,

//读取的字节数是sizeof(buffer) * sizeof(char)

//p:文件指针

//返回值:fread函数的返回值表示读取的基本单位数。

size_t count=fread(buffer,sizeof(int),sizeof(buffer) - 1,p);

//打印读取的内容

printf('buffer=%s,读取计数=%u\n ',buffer,count);

printf(' Main End \ n ');

返回0;

}

执行结果:

六、读取完毕的情况

如果文件已经读取,文件没有关闭,再次调用fread函数继续读取,那么读取的基本单元数为0 0 0;

使用feof(p)确定文件是否已被读取;如果返回true,说明文件没有被读取;如果返回false,则表示文件已被读取;

代码示例:

#包含stdio.h

int main()

{

//使用“rb”读取二进制文件以打开文件

FILE *p=fopen('D:\\a.txt ',' Rb ');

//接收读取数据的缓冲区

char buffer[1024]={ 0 };

//buffer:文件读入内存的位置

//sizeof(char):读取基本单元的字节长度。

//sizeof(buffer):读取的基本单位数,

//读取的字节数是sizeof(buffer) * sizeof(char)

//p:文件指针

//返回值:fread函数的返回值表示读取的基本单位数。

size_t count=fread(buffer,sizeof(char),sizeof(buffer) - 1,p);

//打印第一次读取的内容

printf('First fread : buffer=%s,read count=%u\n ',buffer,count);

count=fread(buffer,sizeof(int),sizeof(buffer) - 1,p);

//打印第二次读取的内容

printf('Second fread : buffer=%s,读取计数=%u\n ',buffer,count);

printf(' Main End \ n ');

返回0;

}

执行结果:

七、读取文本文件 “\n” 与 读取二进制文件 “\r\n” 区别

以下区别只在 Windows 系统存在 , 在 Linux / Unix 中读取文本数据与二进制数据没有区别 ;

使用‘Rb’模式打开文件,读取二进制文件,然后调用fread函数读取文件,

#包含stdio.h

int main()

{

//使用“rb”读取二进制文件以打开文件

FILE *p=fopen('D:\\a.txt ',' Rb ');

//接收读取数据的缓冲区

char buffer[1024]={ 0 };

//buffer:文件读入内存的位置

//sizeof(char):读取基本单元的字节长度。

//sizeof(buffer):读取的基本单位数,

//读取的字节数是sizeof(buffer) * sizeof(char)

//p:文件指针

//返回值:fread函数的返回值表示读取的基本单位数。

size_t count=fread(buffer,sizeof(char),sizeof(buffer) - 1,p);

//打印第一次读取的内容

printf('fread : buffer=%s,read count=%u\n ',buffer,count);

//逐字节打印读取数据的ASCII码

int I=0;

for(I=0;我数;i ){

printf('buffer[%d]=%x\n ',I,buffer[I]);

}

printf(' Main End \ n ');

返回0;

}

结果:从第222个索引读取的值是0xd对应' \ r ',第333个值是0xa对应' \ n ';

注意:最后两个字节为“\r\n”对应空行;

fread : buffer=ab

激光唱片

,读取计数=8

缓冲区[0]=61

缓冲区[1]=62

缓冲区[2]=d

缓冲器[3]=a

缓冲区[4]=63

缓冲区[5]=64

缓冲区[6]=d

缓冲器[7]=a

主要端

用‘R’模式打开文件,读取文本文件,然后调用fread函数读取文件,

#包含stdio.h

int main()

{

//使用“rb”读取二进制文件以打开文件

FILE *p=fopen('D:\\a.txt ',' r ');

//接收读取数据的缓冲区

char buffer[1024]={ 0 };

//buffer:文件读入内存的位置

//sizeof(char):读取基本单元的字节长度。

//sizeof(buffer):读取的基本单位数,

//读取的字节数是sizeof(buffer) * sizeof(char)

//p:文件指针

//返回值:fread函数的返回值表示读取的基本单位数。

size_t count=fread(buffer,sizeof(char),sizeof(buffer) - 1,p);

//打印第一次读取的内容

printf('fread : buffer=%s,read count=%u\n ',buffer,count);

//逐字节打印读取数据的ASCII码

int I=0;

for(I=0;我数;i ){

printf('buffer[%d]=%x\n ',I,buffer[I]);

}

printf(' Main End \ n ');

返回0;

}

结果:第222个索引读取的值是0xa对应的' \ n ';

最后一个空行只有一个' \ n ';

fread : buffer=ab

激光唱片

,读取计数=6

缓冲区[0]=61

缓冲区[1]=62

缓冲区[2]=a

缓冲区[3]=63

缓冲区[4]=64

缓冲器[5]=a

主要端

总结

关于C语言文件操作的fread函数的这篇文章到此为止。关于C语言文件操作的fread函数的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: