fread函数原型 常见的八种函数模型
大家好,关于fread函数原型很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于常见的八种函数模型的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
fread函数的用法
fread函数可从文件中读取二进制数据
语法:
A= fread(fid, count)
A= fread(fid, count, precision)
其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。
例子:
fid= fopen('alphabet.txt','r');
c= fread(fid, 5)'
c=
65 66 67 68 69
fclose(fid);
程序说明:alphabet文件中按顺序存储着26个英文字母,读取文件之前要先打开文件,由于未指定读取数据的类型,所以程序指定默认类型为无符号字符型即uchar,65、66、67、68、69代表A、B、C、D、E,文件用完还要记得关闭文件,以便释放指针。
扩展资料:用法
int feof(FILE*stream);
参数
流:FILE结构的指针
注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。
参考资料:fread--百度百科
C语言中fread的一些疑问
L_o_o_n_i_e回答得不怎么准确!
我帮你解释下:
首先介绍fread函数
功能:从一个流中读数据
函数原型: int fread(void*ptr, int size, int nitems, FILE*stream);参数:用于接收数据的地址(指针)(ptr)
单个元素的大小(size):单位是字节而不是位,例如读取一个整数值就是4元素个数(nitems)
提供数据的文件指针(stream)
返回值:成功读取的元素个数
由上面介绍知道fread函数的第一个参数是个指针变量,可以指向任意类型实参!
严归正传,对于你这里的问题,你代码中的s是个结构体数组变量,跟普通数组变量一样,数组名本身就是个指针常量,所以在buffer位置写成s是没有问题的。
那么为什么你这里读会变乱码呢?
虽然你帖的代码并没有全,但从你说的读取是乱码,我大概猜到在你用fwrite函数把数据写进文件的时候是以每次一个结构体大小(也就是仅仅是数组s的一个元素而已,也就对应一个下标而已)和一个数据块的方式写进文件里的。所以当你用fread函数读取的时候,假设你在buffer位置写成s,本身语法是没有问题的,但是就相当于你把数组s的仅一个元素的数据大小当成所有s的数据存到s中,也就是没有对应起来,所以显示会是乱码。
所以你可以有两种方式实现:
方式一:
在写的时候按一次以s的一个元素的数据大小作为一个数据块依次写进文件,然后读取时候也以同样方式读出来。
代码可以这么写:
假设s的大小为:SIZE_S
for(count= 0; count< SIZE_S; count++)
fwrite(&s[count], sizeof(struct student), 1, fp);
然后读取时:
for(count= 0; count< SIZE_S; count++)
fread(&s[count], sizeof(struct student), 1, fp);
方式二:
以整个数组s的数据大小作为一个数据块一次写进文件,然后读取时也同样全部读出来,最后可以以循环的方式打印出来。
代码实现如下:
假设s的大小为:SIZE_S
fwrite(s, SIZE_S* sizeof(struct student), 1, fp);
然后读取时:
fread(s, SIZE_S* sizeof(struct student), 1, fp);
最后打印:
for(count= 0; count< SIZE_S; count++)
fread(&s[count], sizeof(struct student), 1, fp);
明白了记得给哥哥顶下~~~ ^_^
c语言fread()返回总是0
1、返回0通常是读到了文件尾。如果确认没有到文件尾,可以用ferror检查错误。
if( ferror( fp)){
printf("File read error.");
}
2、C语言中:fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
函数原型:size_t fread( void*buffer, size_t size, size_t count, FILE*stream);
参数:
buffer用于接收数据的内存地址
size要读的每个数据项的字节数,单位是字节
count要读数据项的个数,每个数据项size个字节.
stream输入流的指针
返回值:
返回实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。
实例:
#include<stdio.h>
#include<string.h>
intmain(void)
{
FILE*stream;
charmsg[]="thisisatest";
charbuf[20];
if((stream=fopen("DUMMY.FIL","w+"))==NULL)
{
fprintf(stderr,"Cannotopenoutputfile.
");
return0;
}
fwrite(msg,1,strlen(msg)+1,stream);
fseek(stream,0,SEEK_SET);
fread(buf,strlen(msg)+1,1,stream);
printf("%s
",buf);
fclose(stream);
return0;
}
fread函数原型的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于常见的八种函数模型、fread函数原型的信息别忘了在本站进行查找哦。