c语言中fread函数的用法,fread是什么函数
- 开发语言
- 2023-08-13
- 335
其实c语言中fread函数的用法的问题并不复杂,但是又很多的朋友都不太了解fread是什么函数,因此呢,今天小编就来为大家分享c语言中fread函数的用法的一些知识,希...
其实c语言中fread函数的用法的问题并不复杂,但是又很多的朋友都不太了解fread是什么函数,因此呢,今天小编就来为大家分享c语言中fread函数的用法的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
include和fread函数区别
include和fread是C语言中的两个不同函数,它们有以下区别:
功能:include是预处理指令,用于将一个头文件的内容包含到当前源文件中。而fread是标准库函数,用于从指定的文件中读取数据。
语法:include指令的语法为#include<stdio.h>,它不需要参数。而fread函数的语法为size_tfread(void*ptr,size_tsize,size_tcount,FILE*stream),它需要指定读取数据的缓冲区、数据块大小、数据块数量和文件指针作为参数。
文件操作:include指令只是将头文件的内容复制到当前源文件中,不涉及文件操作。而fread函数通过指定的文件指针进行实际的文件读取操作。
作用域:include指令作用于整个源文件,将头文件的内容直接插入到源文件中。而fread函数只影响其所在函数的作用域。
可移植性:include指令是C语言的标准化特性,在不同的编译器和平台上都得到支持。而fread函数依赖于标准库的实现,在不同的平台和编译器上可能有所差异。
综上所述,include指令用于包含头文件,不涉及实际的文件操作,而fread函数用于从文件中读取数据,具有更具体的文件操作功能。
fread判断文件里的数组长度
使用fread函数读取文件中的数组长度,可以通过以下步骤实现:
打开文件并获取文件指针。
使用fread函数读取文件中的数据到一个缓冲区。
使用ftell函数获取文件指针的当前位置,即已读取的字节数。
使用sizeof操作符获取数组元素的大小。
将已读取的字节数除以数组元素的大小,即可得到数组的长度。
注意,fread函数读取的是二进制数据,因此需要根据实际情况解析数据内容。
文件中的数据必须按照特定格式进行存储和读取,以确保正确获取数组长度。
C语言读取文件中的数据
读写文件在编程里面应该是用的最多也最基础的工作了。但是,C语言中,文件读写方法有很多种,各种方法的使用场景区别甚大,到底日常工作中,我们什么时候该用哪种方法呢?还是说随便抓一种用就可以?
这里就给大家分享一下C语言文件的各种方法:
在window环境下,文件分别两种,一种为文本文件(用记事本可以打开的文件,如txt、xml、html、js等),一种为二进制文件(如图片、软件、压缩包等)
读写文本文件
首先创建一个File对象,这个利用到系统库中的fopen()函数,该函数返回一个File*类型的对象。
FILE*fopen(constchar*filename,constchar*mode);
第一个参数为:文件路径;第二个参数为打开模式:这个是固定的,具体是什么意思大家可以自己去查一下,没什么特别的,记住就好了。
1、文本文件读写
接下来我们读写一个文本文件,我新建一个test.txt文件并且读取出内容写进newtest.txt文件中,这里有两组函数fgetc/fputc和fgets/fputs函数,故名意意,fgetc是读取出一个字符,而fgets是读取一段字符串,fputc是读写入一个字符,fputs写进一段字符串。我们分别来看一下:
intmain(){ FILE*fpr=fopen("test.txt","r"); FILE*fpw=fopen("newtest.txt","w"); if(fpr&&fpw) { while(!feof(fpr)) { charc=(char)fgetc(fpr); cout<<c; fputc(c,fpw); } } fclose(fpr); fclose(fpw); system("pause"); return0;}
注意:
1、feof是判断是否读取到文件尾的函数,此处不用EOF来作为读写结束条件是因为:函数如fgetc或getc返回EOF并不一定表示文件结束,当读取文件出错时也会返回EOF,仅凭返回-1就认为文件结束是错误的;正因为如此,我们需要feof()来判断文件是否结束,当然用feof()来判断文件结束时也需要判断读取操作是否出错,这时可以用ferror()来判断,当其为真时表示有错误发生。在实际的程序中,应该每执行一次文件操作,就用用ferror函数检测是否出错。
2、fgetc()返回的是int,如果要在屏幕上打印出字符的话需要转换为char;
上面是一个字符一个字符的读,下面一段一段的读:
FILE*fpr=fopen("test.txt","r");FILE*fpw=fopen("newtest.txt","w");if(fpr&&fpw){ while(!feof(fpr)) { char*buff=newchar[1024]; char*s=fgets(buff,3,fpr); cout<<s; fputs(s,fpw); }}fclose(fpr);fclose(fpw);
这个方法个人不是很推荐,因为在使用过程中经常会报错,这里我如果将以此读取的字符串长度由3改为2或者1就会报错,这个我也搞不清为什么,如果有知道的朋友可以评论帮我解答一下;
读写二进制文件
C语言读写二进制文件通过库函数fread和fwrite实现:
size_tfread(void*buff,size_tsizeofElement,size_tcount,FILE*stream);
size_tfwrite(constvoid*ptr,size_tsizeofElement,size_tcount,FILE*stream);
参数解释:buff:缓存区地址
sizeofElement:每次读/写的数据大小
count:要多去多个个sizeofElement大小的数据
stream:文件指针
现在我们来读一张神仙姐姐的图片test.ipg并且将读取到的内容写进newtest.jpg,然后查看是否能打开。
intmain(){FILE*fpr=fopen("test.jpg","rb");FILE*fpw=fopen("newtest.jpg","wb");char*buff=newchar[50];intlen=50;while(len==50){len=fread(buff,sizeof(char),50,fpr);fwrite(buff,sizeof(char),len,fpw);}fclose(fpr);fclose(fpw);system("pause");return0;}
运行结果,打开newtest.jpg,结果完美呈现神仙姐姐。
注意以下几点:
1、文件打开方式,不管是读还是写都需要在后面加b,b就是binary二进制的意思,所以这里打开方式是“日本”和“wb”;
2、写入fwrite中的count一定要注意,你的缓存区存了多大的内容这里就写多大的内容,不然会导致文件损坏,因为我定的是每次读取50个char大小的内容,但是文件大小不可能是50的整数啊,最后一次读取的话他肯定会小于50,并且大小不能超过缓存区的大小;
文件内部位置指针
在打开任何文件的时候,都会有一个文件内部位置指针。为什么要在这里介绍这个呢?我们大部分读取文件的时候都是不用去管他的,因为我们基本很少有读取固定位置开始固定长度的需求,都是从开始一直读取到文件结束。
其实我们上面用到的那么多函数,位置指针在文件被打开的时候位置指针是在零为,每读取一次这个指针就会往后面移动你读取的数据两个距离。
这里有三个函数:
1、intfseek(FILE*stream,longintoffset,intwhere)这个函数的作用是将文件位置指针从指定位置(where:系统有定义三个宏SEEK_SET:文件头、SEEK_CUR当前指针位置、SEEK_END文件尾,当然你也可以自己指定位置,比如100、50这样)移动个offset个位置(正数往后移,负数往前移);
2、voidrewind(FILE*stream)这个很简单,将位置指针指向文件开头;
3、longintftell(FILE*stream)这个也很简答,告诉你当前位置指针的位置(相对于文件头);
这可以干嘛呢?最实用的,当然是快速的获取文件长度啊:
我们只需要用fseek将指针移动到文件尾,再用ftell求出当前指针位置就是了:
fseek(fpr,OL,SEEK_END);注意这里的offset一定要给0
ftell(fpr);
C语言中出现Unhandled exception
1、你把文件流指针关闭了,就不能再次使用了,除非你用fopen打开2、建议你将malloc与free成对使用3、C语言存在fread函数,不需要你自己去封装函数我愚钝,改不了你的代码,提一点个人观点
c语言中进行文件读写的函数是
C语言对文件进行读取之前需要先打开文件,然后再进行读写,读写完之后关闭文件。可以使用两组函数实现:
一、C语言库函数打开文件:fopen读写(一般对应成对使用):fgetc---fputcfgets---fputsfread---fwrite关闭文件:fclose
二、Linux系统函数打开文件:open读写(一般对应成对使用):read---write关闭文件:close
关于本次c语言中fread函数的用法和fread是什么函数的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。
本文链接:http://xinin56.com/kaifa/852.html