我有以下结构
struct
{
char order;
int row;
int column;
int length;
char printChar;
}record;
我的文件看起来像这样
F
30
40
7
X
我如何使用 fread 将文件存储在结构中?我的文件是否正确显示,还是所有组件都需要在一行中?
如果我理解正确,您是在问是否可以
struct record r;
fread(file, &r, sizeof(r));
还是你被迫使用
struct record r;
fread(file, &r.order, sizeof(r.order));
如果这是您的问题,那么答案是:您必须一一阅读字段,因为结构成员之间可能存在填充。或者,如果您使用 GNU 兼容的编译器,您可以通过将您的结构声明为“打包”来指示它不包含任何填充:
struct record {
// ...
} __attribute__((packed));
但除非绝对必要,否则不建议这样做(它不是便携式的)。
另外,您的文件真的是二进制文件吗?如果没有,您应该注意换行符并将数字从文本转换为它们的实际数值。
您的文件似乎是一个文本文件,所以如果这正是文件的格式,您可以使用fscanf
:
fscanf(file, "%c%d%d%d%c", &(record.order), &(record.row), ...
如果您对基本错误处理感兴趣,可以检查返回值。如果您需要更好地描述错误,只需使用fgets
一次读取一行并使用sscanf
、atoi
和strtol
类似函数解析它。
如果要直接将数据保存在结构中,不,不能(使用那种文件),在文本文件30
中是两个字符的字符串,而不是二进制形式的整数。