中易网

c语言的fread如何读文件和输出?

答案:2  悬赏:0  
解决时间 2021-02-02 06:32
c语言的fread如何读文件和输出?
最佳答案
那个人都是复制百度百科的,你追问他,他怎么可能会!首先指出程序中的几点致命错误:Infor *pq=new Infor;最起码应该是struct infor *pq=new Infor;你的有语法错误。Infor a=new Infor;
也应该是struct infor *a=new Infor;你的类型都不对。更可怕的是,你竟然不释放空间,没有delete,那么你程序运行一次,内存就丢失一部分,我们叫他内存泄漏。 你的程序为什么是乱码,又不能读到数据,原因是fread(void *ptr, int size, int nitems, FILE *stream);
是从stream这个文件流中,读取nitems次,每次size大小的数据,放到ptr所指向的地址空间。fwrite也是同理。而你的fwrite(pq,sizeof(pq),1,fp);读取1次没有错,但是sizeof(pq),你知道返回什么吗?pq是个指针,大小是4字节,和你的数据完全没有关系。就算你改成fwrite(pq,sizeof(*pq),1,fp);也不对,因为sizeof(*pq),返回的是整个结构体的大小,结构体内部的数据成员,在地址空间上是连续排列的没错,但是,为了寻址方便,有的情况会用空白数据来填充,以达到整除的目的。比如说: struct stru {int a;char b;int c;};这其中,a占4个字节,b也占4个字节,c也占4个字节,虽然b到c的空间中只要1个字节就可以表示char类型。 你的程序应该改为fwrite(&(pq->month),sizeof(pq->month),1,fp);............ //其他的数据读入,分开依次读写的时候也是同理。
全部回答
功 能: 从一个流中读数据 用 法: int fread(void *ptr, int size, int nitems, FILE *stream); 程序例: #include <string.h> #include <stdio.h> int main(void) { FILE *stream; char msg[] = "this is a test"; char buf[20]; if ((stream = fopen("DUMMY.FIL", "w+")) == NULL) { fprintf(stderr, "Cannot open output file./n"); return 1; } fwrite(msg, strlen(msg)+1, 1, stream); fseek(stream, SEEK_SET, 0); fread(buf, strlen(msg)+1, 1, stream); printf("%s/n", buf); fclose(stream); return 0; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
从承德到海南海口快递要几天
红糖糯米饭怎么蒸不会粘锅又好吃
为什么wifi刚开始只保存之后就连接被拒绝了
明英饭店怎么去啊,有知道地址的么
麻烦帮我找一首歌,很燃的歌,是一个视频里的
高口口试考了两次,但是都没有很好的去复习,
我在广州摄缘买的XT1,当时短信查询查不到,
中央音乐学院小提琴考级
王俊凯王源他们现在回重庆了吗
玉林市春玥日用品有限公司地址在什么地方,想
思兰朵可以什么疤痕都去掉吗
协立在什么地方啊,我要过去处理事情
火车可以带600ml的发胶吗。 求助
I live three kilometers _______ our school
什么牌子的防辐射抗疲劳眼镜好,价格不要那么
推荐资讯
女人生孩子痛吗 是不是在那个地方生出的 孩子
EMC Level 54和IBM Band 9一样吗?
郭采洁的隐形超人歌词是什么意思啊!
安卓手机录音文件在哪里
新华星美容美发用品这个地址在什么地方,我要
青春别墅化妆名品店道口铺加盟店怎么去啊,有
老胖子铁锅炖地址在哪,我要去那里办事
笔记本屏幕花屏了是什么情况?屏幕进水了?
金麦削面怎么去啊,有知道地址的么
5151花朵礼品饰品在哪里啊,我有事要去这个地
河北省沧州市青县有没有PVC管生产厂家,PVC排
现在KTV有没有我是歌手里的歌了
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?