c语言的fread如何读文件和输出?
答案:2 悬赏:0
解决时间 2021-02-02 06:32
- 提问者网友:我稀罕你
- 2021-02-01 12:08
c语言的fread如何读文件和输出?
最佳答案
- 二级知识专家网友:狙击你的心
- 2021-02-01 13:29
那个人都是复制百度百科的,你追问他,他怎么可能会!首先指出程序中的几点致命错误: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);............ //其他的数据读入,分开依次读写的时候也是同理。
也应该是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);............ //其他的数据读入,分开依次读写的时候也是同理。
全部回答
- 1楼网友:颜值超标
- 2021-02-01 14:25
功 能: 从一个流中读数据
用 法: 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;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |