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

 我来答
匿名用户
推荐于2016-07-22
展开全部
那个人都是复制百度百科的,你追问他,他怎么可能会!首先指出程序中的几点致命错误: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);............ //其他的数据读入,分开依次读写的时候也是同理。
匿名用户
2013-09-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;
}

/* write some data to the file */
fwrite(msg, strlen(msg)+1, 1, stream);

/* seek to the beginning of the file */
fseek(stream, SEEK_SET, 0);

/* read the data and display it */
fread(buf, strlen(msg)+1, 1, stream);
printf("%s/n", buf);

fclose(stream);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式