使用fwrite将结构指针写入文件

时间:2011-02-25 13:41:10

标签: c pointers data-structures file-io

我正在尝试将结构指针写入文件。我想要的是编写一个指向字符缓冲区的结构指针,然后从缓冲区中检索指针,最后将整个结构写入文件。

我没有写整个结构,而是在文件中获取垃圾数据。

我在代码中遗漏了某些内容或者犯了一些错误。

完整地粘贴我的测试代码。

#include <stdio.h>
# include<stdlib.h>
#include <string.h>
typedef struct dummy_s {

  int a;
} dummy_t;

void main(int argc, char* argv)
{


   char *s1;
   s1 = malloc(sizeof(dummy_t)*1000);
   dummy_t * tmp1;
   tmp1 = (dummy_t *)s1;
   tmp1 -> a = 100;
   FILE *f;
   f = fopen("dummyfile.txt","w");
   dummy_t * tmp = NULL;
   tmp = malloc(sizeof(dummy_t));
   memcpy(tmp, s1, sizeof(dummy_t));
   fwrite(tmp,sizeof(struct dummy_s),1,f);
   fclose(f);
}

[编辑错误编辑 - 抱歉] 干杯! 那仁

2 个答案:

答案 0 :(得分:1)

抱歉,但我会有点粗鲁。如果您发布了代码段,请确保它正确编译。你的代码使用的是变量“d”,它没有定义,它需要“sizeof dummy”(我在这里看不到假人,至少在代码中没有),而且它缺少一堆#include:第

修复编译错误(使用tmp1而不是d)时,它似乎正常工作。请注意,您生成的“文本文件”包含结构的二进制表示,而不是文本结构。 (假设有一个32位的小端机器,你会净化一个值为100的字节,然后是四个值0)。

另外,我没有看到需要最后一个malloc和memcpy,fwrite应该能够直接写出原始数组的内容。

答案 1 :(得分:0)

您是否希望将结构文本或二进制文件写入文件?

如果您想将其编写为文本,请先使用sprintf将您的号码转换为文本表示,例如

char buf[100];
sprintf (s, "%d", tmp->a);

然后使用fputs将buf写入文件。

如果要创建二进制文件,请确保不使用“w”打开文件,而使用“wb”打开文件。 否则,运行时可能会将某些字符转换为其他字符(例如换行符变为回车符+换行符)。 “wb”中的“b”告诉fopen您想要以二进制方式编写文件,而不是执行任何字符转换。