在C语言中一次读取一个字段的二进制文件

在C语言中一次读取一个字段的二进制文件,c,binaryfiles,readfile,C,Binaryfiles,Readfile,我正在学习如何用C语言处理文件。当我尝试读取二进制文件时,一切运行正常,但我得到了一个垃圾输出 这是我的密码: FILE *ptr; struct file rec; ptr=fopen("sample.bin","rb"); while(!feof(ptr)) { fread(&rec,sizeof(struct file),1,ptr); printf("%d, %d, %d, %d, %f, %x, %s, %f, %c, %d, %u, %d, %x, %d,

我正在学习如何用C语言处理文件。当我尝试读取二进制文件时,一切运行正常,但我得到了一个垃圾输出

这是我的密码:

FILE *ptr;
struct file rec;

ptr=fopen("sample.bin","rb");
while(!feof(ptr))
{
    fread(&rec,sizeof(struct file),1,ptr);
    printf("%d, %d, %d, %d, %f, %x, %s, %f, %c, %d, %u, %d, %x, %d, %d, %u, %f\n",
    rec.a, rec.b, rec.c, rec.d, re.e, rec.f,rec.g, rec.h, rec.i, rec.j, rec.k, rec.l,rec.m, rec.n, rec.o, rec.p, rec.q);
}
所以我想我可能需要使用多个
fread()
。有人能告诉我怎么用吗

注意:sample.bin的外观如下:

0000 0000 0101 002f 1000 0000 00f4 0d0a
4540 8f94 e9ff ffff ffff 636c 6f63 6b00
00c0 ece0 3b69 b736 a1ea ffff ffff 2700
0000 0000 8dcb 0cce 0301 7294 cc02 0000
0000 0000 42bf 

你希望二进制文件能被魔法解码。您需要在字节级别理解二进制文件格式,读入其中的一块,解码字节,并在结构中适当地设置值。您的代码中没有任何地方可以解释文件中每个字节的含义,这些知识对于理解文件是必要的。

除了需要知道David答案中的信息之外,您还应该检查
return
to
fread
,以便在尝试访问
rec.a中的大量未初始化值或垃圾值之前,知道是否有任何数据要
printf
。。。rec.q