我必须在文件中写一个结构,以便稍后阅读。结构是:
struct prog{
char* title;
char* channel;
struct tm* start;
struct tm* end;
float review;
enum soort sort;
union type *type;
};
union type{
struct serie *ep;
struct film *mov;
};
struct serie{
int seznum;
int epnum;
char* eptitle;
};
struct film{
char* reg;
char* act;
char* genre;
};
enum sort { film, serie }
所以你可以看到有指向字符串和struct tm的指针(来自time.h)。我无法弄清楚如何将它写入二进制文件,我所能做的就是逐字符串地写它,但必须有一种更有效的方法来编写前一个结构。 我认为问题始于char *和指向tm结构的指针,因为程序现在要编写字符串开头的地址或tm结构的地址。我不想写字符串而不是文件的地址。我尝试使用记录I / O但它写了地址,所以我以后不能读它们。 谢谢!
答案 0 :(得分:0)
您可能希望查看time_t或其他可以在单个整数时间戳中存储时间的替代方法。您还可以使用数据库或简单文件存储类。
否则,使用本机C函数无法真正改善这一点。您可以删除指针并使用固定字符数组,如下所示:
struct T_film
{
char text[50];
int i;
};
struct T_prog
{
char title[50];
tm start;
tm end;
T_film film;
};
T_prog data;//initialize...
fwrite(&data, 1, sizeof(T_prog), fout);
fseek(fin,0,0);
fread(&data, 1, sizeof(T_prog), fin);
现在结构有一个固定的模式,一切都可以存储在二进制中。但是,这可能更低效。文本的大小太短或太长,有额外的空白空间需要很长时间才能阅读。它也不便携。因此,您可能希望坚持使用临时方法进行指针和读/写。
您还可以分离固定大小的数据并将它们放在单独的结构中。将固定大小的数据写入一个块,然后逐个写入字符串。