具有指向文件的指针的写/读结构

时间:2015-03-07 18:52:02

标签: c file struct io

我必须在文件中写一个结构,以便稍后阅读。结构是:

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但它写了地址,所以我以后不能读它们。 谢谢!

1 个答案:

答案 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);

现在结构有一个固定的模式,一切都可以存储在二进制中。但是,这可能更低效。文本的大小太短或太长,有额外的空白空间需要很长时间才能阅读。它也不便携。因此,您可能希望坚持使用临时方法进行指针和读/写。

您还可以分离固定大小的数据并将它们放在单独的结构中。将固定大小的数据写入一个块,然后逐个写入字符串。