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);
明白了记得给哥哥顶下~~~ ^_^
RFCHOST,这个服务商我们可能有一些朋友知道的。不要看官网是英文就以为是老外服务商,实际上这个服务商公司在上海。我们实际上看到的很多商家,有的是繁体,有的是英文,实际上很多都是我们国人朋友做的,有的甚至还做好几个品牌域名,实际上都是一个公司。对于RFCHOST商家还是第一次分享他们家的信息,公司成立大约2015年左右。目前RFCHOST洛杉矶机房VPS正进行优惠促销,采用CN2优化线路,电信双...
HostHatch在当地时间7月30日发布了一系列的促销套餐,涉及亚洲和欧美的多个地区机房,最低年付15美元起,一次买2年还能免费升级双倍资源。商家成立于2011年,提供基于KVM架构的VPS主机,数据中心包括中国香港、美国、英国、荷兰、印度、挪威、澳大利亚等国家的十几个地区机房。官方网站:https://hosthatch.com/NVMe VPS(香港/悉尼)1 CPU core (12.5%...
青云互联怎么样?青云互联是一家成立于2020年的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、韩国服务器、香港服务器、美国云服务器,香港安畅cn2弹性云限时首月五折,15元/月起;可选Windows/可自定义配置,让您的网站高速、稳定运行。点击进入:青云互联官方网站地址青云互联优惠码:八折优惠码:ltY8sHMh (续费同价)青云互联香港云服务器活动...
fread为你推荐
换脸软件手机上哪个软件可以换脸?就是P金馆长那种脸 美化照片的就不要说了chinapay贝宝和支付宝的区别知识分享平台关于分享职场技能的知识付费平台,大家有什么好推荐的吗?数据挖掘项目怎样利用大数据挖掘农业项目发展前景qq网络硬盘怎么用qq网络硬盘kjava谁能告诉我KJAVA是什么意思和普通的JAVA程序有什么区别?kjava通用KJava是什么意思网络备份win7中如何备份网络设置网络电话免费版有没有免费的网络电话?纯免费的点心os什么是点心os?手机操作系统和手机区别么?一个是硬件一个是软件?听说炒的好火?
asp网站空间 国际域名抢注 如何申请免费域名 godaddy支付宝 shopex空间 英语简历模板word 174.127.195.202 ixwebhosting debian6 tk域名 申请空间 七夕快乐英文 谁的qq空间最好看 共享主机 vip购优惠 河南移动m值兑换 100mbps idc查询 如何注册阿里云邮箱 linux使用教程 更多