freadC语言中fread的一些疑问

fread  时间:2021-06-07  阅读:()

关于fread和fwrite的用法问题

这个肯定不可以的, 首先你的a数组的大小不是book而是应该*n; 然后这是结构体数组不是字符串数组,要一个个输。

还有我自己的疑问你的fread没写错么?不是fread(&a[k], sizeof(BOOK), 1, fp)么?传的不 是结构体的地址么?

fread的用法

fread(&a, 4, 1, fp); 此处不正确. 还是使用fscanf比较方便. 你要是使用fread的话,你首先得读取字符串,然后再把字符串转换成整数.因为你在文件中是以字符串形式存放的,而不是数字 可以

fread函数第三个参数的作用

fread(line, sizeof(char), 27, infile) fread(ori_file, sizeof(char), 35, file) 这里的27和35个元素个数的元素都是 char 就是说,你最多可以读取27和35个char字符到line和ori_file变量中 如果要读取100行,每行50个字符 可以用一个for循环,循环100次,每一次读50个字符: fread(str, sizeof(char), 50, file);

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); 明白了记得给哥哥顶下~~~ ^_^

陆零(¥25)云端专用的高性能、安全隔离的物理集群六折起

陆零网络是正规的IDC公司,我们采用优质硬件和网络,为客户提供高速、稳定的云计算服务。公司拥有一流的技术团队,提供7*24小时1对1售后服务,让您无后顾之忧。我们目前提供高防空间、云服务器、物理服务器,高防IP等众多产品,为您提供轻松上云、安全防护 为核心数据库、关键应用系统、高性能计算业务提供云端专用的高性能、安全隔离的物理集群。分钟级交付周期助你的企业获得实时的业务响应能力,助力核心业务飞速成...

racknerd:美国大硬盘服务器(双路e5-2640v2/64g内存/256gSSD+160T SAS)$389/月

racknerd在促销美国洛杉矶multacom数据中心的一款大硬盘服务器,用来做存储、数据备份等是非常划算的,而且线路还是针对亚洲有特别优化处理的。双路e5+64G内存,配一个256G的SSD做系统盘,160T SAS做数据盘,200T流量每个月,1Gbps带宽,5个IPv4,这一切才389美元...洛杉矶大硬盘服务器CPU:2 * e5-2640v2内存:64G(可扩展至128G,+$64)硬...

vpsdime7美元/月,美国达拉斯Windows VPS,2核4G/50GB SSD/2TB流量/Hyper-V虚拟化

vpsdime怎么样?vpsdime是2013年成立的国外VPS主机商,以大内存闻名业界,主营基于OpenVZ和KVM虚拟化的Linux套餐,大内存、10Gbps大带宽、大硬盘,有美国西雅图、达拉斯、新泽西、英国、荷兰机房可选。在上个月搞了一款达拉斯Linux系统VPS促销,详情查看:vpsdime夏日促销活动,美国达拉斯vps,2G内存/2核/20gSSD/1T流量,$20/年,此次推出一款Wi...

fread为你推荐
jmh6.13 泗洪事件是怎么个情况、?林俊杰怎么了?tde如何区别动作数据与模型的种类。tde tda lat 啊? mmdexcel计算公式excel表格如何用公式计算加减乘除混合运算csonline2看新闻 csol2 马上就要发布了 我有个问题问大神们 拜托了chrome系统谷歌Chrome OS可以用来做什么?12种颜色12种颜色都是代表什么模式识别算法模式识别、神经网络、遗传算法、蚁群算法等等人工智能算法需要哪些数学知识?asp大马问:ASP是什么?ASP根据什么制作木马的?ASP木马和大马有什么区别?assemblyinfocsgo很跟cs有什么区别文本框透明word里文本框怎么透明?
国际域名抢注 北京域名空间 如何查询域名备案号 独享100m 主机评测 息壤备案 淘宝双十一2018 网页背景图片 dropbox网盘 好看的桌面背景图 ev证书 windows2003iso 国内php空间 湖南服务器托管 gg广告 adroit 支付宝扫码领红包 东莞服务器托管 独立主机 实惠 更多