【问题标题】:Writing Structs to a file in c [closed]在c中将结构写入文件[关闭]
【发布时间】:2013-06-08 07:21:46
【问题描述】:

是否可以将整个结构写入文件

示例:

struct date {
    char day[80];
    int month;
    int year;
};

【问题讨论】:

标签: c file-io structure


【解决方案1】:

是否可以将整个结构写入文件

您的问题实际上是将结构实例写入文件。

  1. 您可以使用fwrite 函数来实现。
  2. 您需要在第一个参数中传递引用。
  3. sizeof第二个参数中的每个对象
  4. 在第三个参数中写入的此类对象的数量。
  5. 第四个参数中的文件指针。
  6. 别忘了打开binary mode中的文件。
  7. 您可以使用 fread 从文件中读取对象。
  8. 在小端系统中写/读和在大端系统中读/写时要小心字节顺序,反之亦然。阅读how-to-write-endian-agnostic-c-c-code

    struct date *object=malloc(sizeof(struct date));
    strcpy(object->day,"Good day");
    object->month=6;
    object->year=2013;
    FILE * file= fopen("output", "wb");
    if (file != NULL) {
        fwrite(object, sizeof(struct date), 1, file);
        fclose(file);
    }
    

你可以用同样的方式阅读它们......使用fread

    struct date *object2=malloc(sizeof(struct date));
    FILE * file= fopen("output", "rb");
    if (file != NULL) {
        fread(object2, sizeof(struct date), 1, file);
        fclose(file);
    }
    printf("%s/%d/%d\n",object2->day,object2->month,object2->year);

【讨论】:

  • 他也应该至少小心结构填充
  • 我还在文件中写了一些C对象,想读回来处理它们。但是,我不知道哪些对象已写入文件,它可能是任何对象,因此,在 fread 中,我不知道我一直在读取的对象的 sizeof()。另外,如何一次只读取一个对象? fread 如何知道文件中表示对象边界的字节的开始和结束?
  • 我猜,如果是这种情况,文件应该有一个结构,例如,假设您在一行中写入类型,在另一行中写入对象等。然后从基于程序的在类型上你可以知道大小..
  • 为什么在我的情况下这个脚本只保存一些O�[name���)�����������.N=�'@�����������V)�mailH��)�� @���� @@б���`?这是因为字符编码错误,还是其他原因?
  • @gaboraron 写入的文件不应该被文本编辑器读取,因为它是 in 对象的序列化形式。如果你想阅读它,你需要编写一个 C 程序来阅读它。您需要查找文件的结尾。您应该查看 fread 的输出。看这里:msdn.microsoft.com/en-us/library/kt0etdcs.aspx。一般来说,如果它是肯定的,那么就会读到一些东西。
猜你喜欢
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多