【发布时间】:2019-05-16 17:26:33
【问题描述】:
我想在程序 A 中将结构写入二进制文件,然后在程序 B 中读取它,然后将结构打印出来。但是,我得到的输出不正确。
我在程序 A 中尝试了 fwrite,在程序 B 中尝试了 fread,然后使用 printf 打印了输出,只是得到了一串无意义的数字。
程序 A:
#include <stdio.h>
#include <stdlib.h>
struct record
{
int index;
char name [100];
int age;
};
int main ()
{
struct record *one=malloc(sizeof(struct record));
FILE *in=fopen("records.bin", "ab+")l
fgets(one->name, 100, stdin);
one->index=100;
one->age=50;
fwrite(&one, sizeof(struct record), 1, in);
fclose(in);
}
程序B(所有头和结构相同,代码如下):
int main ()
{
FILE *in=fopen("records.bin", "rb+");
struct record array;
fread (&array, sizeof(struct record), 1, in);
printf ("%d\n", array.index);
printf ("%s\n", array.name);
printf ("%d\n", array.age);
fclose(in);
}
我希望输出是
100
j
50
但实际输出的是172400800
【问题讨论】:
-
请注意,此方法不可移植。如果两个程序都使用相同的编译器在相同的平台上使用相同的设置进行编译,这将起作用。但在其他条件下可能不起作用。这是因为对于每两个平台/编译器组合,
struct和数字表示(填充、字节顺序等)不一定相同。
标签: c data-structures