c语言的fread如何读文件和输出?
2个回答
推荐于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);............ //其他的数据读入,分开依次读写的时候也是同理。
也应该是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;
}
用 法: 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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询