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);
明白了记得给哥哥顶下~~~ ^_^
印象云,成立于2019年3月的商家,公司注册于中国香港,国人运行。目前主要从事美国CERA机房高防VPS以及香港三网CN2直连VPS和美国洛杉矶GIA三网线路服务器销售。印象云香港三网CN2机房,主要是CN2直连大陆,超低延迟!对于美国CERA机房应该不陌生,主要是做高防服务器产品的,并且此机房对中国大陆支持比较友好,印象云美国高防VPS服务器去程是163直连、三网回程CN2优化,单IP默认给20...
数脉科技(shuhost)8月促销:香港独立服务器,自营BGP、CN2+BGP、阿里云线路,新客立减400港币/月,老用户按照优惠码减免!香港服务器带宽可选10Mbps、30Mbps、50Mbps、100Mbps带宽,支持中文本Windows、Linux等系统。官方网站:https://www.shuhost.com* 更大带宽可在选购时选择同样享受优惠。* 目前仅提供HKBGP、阿里云产品,香港...
ShockHosting商家在前面文章中有介绍过几次。ShockHosting商家成立于2013年的美国主机商,目前主要提供虚拟主机、VPS主机、独立服务器和域名注册等综合IDC业务,现有美国洛杉矶、新泽西、芝加哥、达拉斯、荷兰阿姆斯特丹、英国和澳大利亚悉尼七大数据中心。这次有新增日本东京机房。而且同时有推出5折优惠促销,而且即刻使用支付宝下单的话还可获赠10美金的账户信用额度,折扣相比之前的常规...
fread为你推荐
orderbydescSQL里面的order by语句是干什么用的?svn服务器搭建如何在本机搭建SVN服务器eagleeye电脑进程中出现Eaglesvr这种程序,据说是一种蠕虫病毒。。。怎样杀掉?视频技术短视频运营每天的工作是做什么?需要所学的技术都有什么方面?网络审计网络审计和传统审计的范围有什么变化vga接口定义主板VGA接口两排针脚的循序是怎么排列模式识别算法机器学习和模式识别有什么区别?看教材,发现它们的算法都差不多一样啊。。。印度尼西亚国家代码国际代码jstz请帮忙翻译遗传算法实例如何用C语言实现遗传算法的实际应用?
美国虚拟主机购买 猫咪av永久最新域名 上海服务器租用 云南服务器租用 怎样申请域名 美国主机评论 便宜建站 国外私服 私有云存储 商务主机 韩国网名大全 刀片式服务器 徐正曦 免费网页申请 国外在线代理服务器 东莞服务器托管 qq金券 杭州电信 香港博客 腾讯云平台 更多