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(bufferlinux feof函数,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函数的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们! (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |