首页技术fread格式(thread如何记忆)

fread格式(thread如何记忆)

编程之家2026-06-19647次浏览

这篇文章给大家聊聊关于fread格式,以及thread如何记忆对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

fread格式(thread如何记忆)

fread函数的用法

fread函数可从文件中读取二进制数据

语法:

A= fread(fid, count)

A= fread(fid, count, precision)

其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。

例子:

fread格式(thread如何记忆)

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语言文件操作fwrite和fread

fread是C语言标准为中的一个函数。它从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。

fwrite是C语言标准库中的一个函数,指向文件写入一个数据块。示例如下:

//读取一个完整的文件

#include<stdio.h>

#include<stdlib.h>

intmain()

{

FILE*pFile;//文件指针

longlSize;//用于文件长度

char*buffer;//文件缓冲区指针

size_tresult;//返回值是读取的内容数量

pFile=fopen("myfile.bin","rb");

if(pFile==NULL){fputs("Fileerror",stderr);exit(1);}//如果文件错误,退出1

//获得文件大小

fseek(pFile,0,SEEK_END);//指针移到文件末位

lSize=ftell(pFile);//获得文件长度

rewind(pFile);//函数rewind()把文件指针移到由stream(流)指定的开始处,同时清除和流相关的错误和EOF标记

//为整个文件分配内存缓冲区

buffer=(char*)malloc(sizeof(char)*lSize);//分配缓冲区,按前面的lSize

if(buffer==NULL){fputs("Memoryerror",stderr);exit(2);}//内存分配错误,退出2

//该文件复制到缓冲区

result=fread(buffer,1,lSize,pFile);//返回值是读取的内容数量

if(result!=lSize){fputs("Readingerror",stderr);exit(3);}//返回值如果不和文件大小,读错误

//terminate//文件终止

fclose(pFile);

free(buffer);

return0;

}综合使用的例子。

#include<stdio.h>

intmain()

{

FILE*pFile;

floatbuffer[]={2.0,3.0,8.0};

pFile=fopen("myfile.bin","wb");//打开文件写操作

fwrite(buffer,1,sizeof(buffer),pFile);//把浮点数组写到文件myfile.bin

fclose(pFile);//关闭文件

floatread[3];

pFile=fopen("myfile.bin","rb");//重新打开文件读操作

fread(read,1,sizeof(read),pFile);//从文件中读数据

printf("%f\t%f\t%f

",read[0],read[1],read[2]);

fclose(pFile);//关闭文件

return0;

}

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

明白了记得给哥哥顶下~~~ ^_^

关于fread格式的内容到此结束,希望对大家有所帮助。

ai换脸视频(如何用AI换脸合成一个视频)英雄联盟战斗力查询器 英雄联盟查胜率网站