70,020
社区成员




#include <stdio.h>
#include <time.h>
char fname[128] = "dt.dat";
void get_date(void)
{
struct tm date;
FILE *fp;
if((fp = fopen(fname,"r")) == NULL)
puts("第一次运行该程序。");
else{
int i;
i = fread(&date,sizeof(struct tm),9,fp);
printf("%d\n",i);
printf("上次运行是在%d年%d月%d日%d时%d分%d秒。\n",
date.tm_year + 1900,date.tm_mon + 1,date.tm_mday,
date.tm_hour,date.tm_min,date.tm_sec);
fclose(fp);
}
}
void put_date(void)
{
FILE *fp;
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
if((fp = fopen(fname,"w")) == NULL)
puts("\afile open failed.");
else{
fwrite(local,sizeof(struct tm),9,fp);
fclose(fp);
}
}
int main(void)
{
get_date();
put_date();
return (0);
}
fwrite(local,sizeof(int),1,fp);
fread(&date,sizeof(int),1,fp);
如果第二个参数是sizeof(struct tm)的话,第三个参数就应该是1
fwrite(local,sizeof(struct tm),1,fp);
fread(&date,sizeof(struct tm),1,fp);
这样对吗?[/quote]
可以这样理解,但是,struct tm成员都得是int类型(占四个字节)才可以。这样做有一个缺点,就是如果struct tm添加或者减少一个成员或者某个成员的类型变了,比如编程char,或者double,那么还是有问题。
所以,建议写成这样形式:
fwrite(local,sizeof(struct tm),1,fp);
fread(&date,sizeof(struct tm),1,fp);
除了安全以外,也能提高程序的可移植性。fwrite(local,sizeof(int),1,fp);
fread(&date,sizeof(int),1,fp);
如果第二个参数是sizeof(struct tm)的话,第三个参数就应该是1
fwrite(local,sizeof(struct tm),1,fp);
fread(&date,sizeof(struct tm),1,fp);
这样对吗?fwrite(local,sizeof(int),1,fp);
fread(&date,sizeof(int),1,fp);
如果第二个参数是sizeof(struct tm)的话,第三个参数就应该是1
fwrite(local,sizeof(struct tm),1,fp);
fread(&date,sizeof(struct tm),1,fp);
这样对吗?fwrite(local,sizeof(struct tm),1,fp);
不清楚楼主为什么要传fwrite第三个参数为9,根据你的需要,一个就可以了。
i = fread(&date,sizeof(struct tm),1,fp);