如何从二进制文件读入struct c?

Dan*_*lel 1 c file

我有以下结构

struct
{
    char order;
    int row;
    int column;
    int length;
    char printChar;
}record;
Run Code Online (Sandbox Code Playgroud)

我的文件看起来像这样

F
30
40
7
X
Run Code Online (Sandbox Code Playgroud)

我如何使用fread将文件存储在结构中?我的文件是否正确显示或所有组件是否需要单行?

小智 7

如果我理解正确,你会问你是否能做到

struct record r;
fread(file, &r, sizeof(r));
Run Code Online (Sandbox Code Playgroud)

或者你被迫使用

struct record r;
fread(file, &r.order, sizeof(r.order));
Run Code Online (Sandbox Code Playgroud)

如果这是你的问题,那么答案是:你必须逐个读取字段,因为struct成员之间可能存在填充.或者,如果您使用与GNU兼容的编译器,您可以通过将结构声明为"packed"来指示它不要包含任何填充:

struct record {
    // ...
} __attribute__((packed));
Run Code Online (Sandbox Code Playgroud)

但除非绝对必要,否则不建议这样做(不便携).

另外,您的文件真的是二进制文件吗?如果没有,您应该注意换行符并将数字从文本转换为实际数值.