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);
明白了记得给哥哥顶下~~~ ^_^
IonSwitch是一家2016年成立的国外VPS主机商,部落上一次分享的信息还停留在2019年,主机商提供基于KVM架构的VPS产品,数据中心之前在美国西雅图,目前是美国爱达荷州科德阿伦(美国西北部,西接华盛顿州和俄勒冈州),为新建的自营数据中心。商家针对新数据中心运行及4号独立日提供了一个5折优惠码,优惠后最低1GB内存套餐每月仅1.75美元起。下面列出部分套餐配置信息。CPU:1core内存...
港云网络官方网站商家简介港云网络成立于2016年,拥有IDC/ISP/云计算资质,是正规的IDC公司,我们采用优质硬件和网络,为客户提供高速、稳定的云计算服务。公司拥有一流的技术团队,提供7*24小时1对1售后服务,让您无后顾之忧。我们目前提供高防空间、云服务器、物理服务器,高防IP等众多产品,为您提供轻松上云、安全防护。点击进入港云网络官方网站港云网络中秋福利1元领【每人限量1台】,售完下架,活...
GigsGigsCloud新上了洛杉矶机房国际版线路VPS,基于KVM架构,采用SSD硬盘,年付最低26美元起。这是一家成立于2015年的马来西亚主机商,提供VPS主机和独立服务器租用,数据中心包括美国洛杉矶、中国香港、新加坡、马来西亚和日本等。商家VPS主机基于KVM架构,所选均为国内直连或者优化线路,比如洛杉矶机房有CN2 GIA、AS9929或者高防线路等。下面列出这款年付VPS主机配置信息...
fread为你推荐
腾讯举报中心腾讯的投诉电话是多少啊?performclickC#中 键盘entre执行确定命令的代码是什么orphanremovalorphan是什么意思华为总裁女儿为啥姓孟任正非女儿为什么姓孟?腾讯汽车网可以了解汽车知识的权威网站大概有哪些数据统计分析表如何用Excel做数据分析?谷歌图片识别怎么通过一张GIF图在网上搜索出其出处(你们懂的...)以图搜图那个百度只找到了一模一样的..,有微信智能机器人有没有微信自动聊天机器人文本框透明html怎么把这个文本框变为透明?中信银行理财宝中信银行理财宝金卡怎样激活
cm域名注册 高防服务器租用qy 域名服务dns的主要功能为 免费域名跳转 骨干网 lamp安装 国外php主机 万网优惠券 java空间 河南移动邮件系统 申请个人网站 vip购优汇 有奖调查 双十一秒杀 网站卫士 免费dns解析 移动服务器托管 网通服务器 免费个人主页 域名转入 更多