我正在尝试将结构指针写入文件。我想要的是编写一个指向字符缓冲区的结构指针,然后从缓冲区中检索指针,最后将整个结构写入文件。
我没有写整个结构,而是在文件中获取垃圾数据。
我在代码中遗漏了某些内容或者犯了一些错误。
完整地粘贴我的测试代码。
#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);
}
[编辑错误编辑 - 抱歉] 干杯! 那仁
答案 0 :(得分:1)
修复编译错误(使用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您想要以二进制方式编写文件,而不是执行任何字符转换。