【发布时间】:2014-07-27 18:50:40
【问题描述】:
struct good {
int ID;
char name[20];
int quantity;
float cost;
}
struct good article;
fseek(hw2, f*sizeof(struct good) + sizeof(article.ID) + sizeof(article.name), SEEK_SET);
参数 sizeof() + sizeof() + sizeof() 的值是否产生预期值:数量字段中第一个字节的索引?当我尝试使用这个文件位置控制语句写入字段时,读回记录,我发现它没有正确写入。
我认为这都是关于填充和内存对齐的。
附:
更清晰的代码示例:
struct good {
short int ID;
char name[20];
int quantity = 0;
float cost = 0;
};
struct good article;
article.ID = 2;
article.name = "Maisara"; //These two fields are already filled, I want to write only to the coming field
article.quantity = 7;
fseek(hw2, f*sizeof(struct good) + sizeof(article.ID) + sizeof(article.name), SEEK_SET);
fwrite(&article.quantity, sizeof(article.quantity), 1, hw2);
【问题讨论】:
-
你想读什么和写什么?你能发布两者的代码吗?
-
你想要
offsetof。 -
为什么要在这里fseek?你可以简单地通过递增指针来跳转?
-
这里有很多不清楚的疑问:: "hw2" 指向哪里? “f * sizeof(struct good)”中的“f”是什么?
-
1. hw2 指向一个以 rb+ 模式打开的文件。
标签: c file-io padding memory-alignment fseek