下面是在学习的时候突然出现的,我想知道它是否做了它应该做的。假设我们有以下结构:
typedef struct a{
int x;
int y;
}a;
我们有一个二进制文件,在那里我们可以找到关于上述结构的多个实例的信息,我们希望有一个这些结构的数组,并逐个填充它们。我们能做以下事情吗?
a* aStruct= malloc(sizeof(a)*10); // aStruct[10]
a* temp;
int i = 0;
while(i < 10){
temp = aStruct+i++;
fread(&temp->x, sizeof(int), 1, inputFile);
fread(&temp->y, sizeof(int), 1, inputFile);
}
以上是否意味着最终,数组
aStruct
将填充文件中的内容?如果没有,我们怎么办? 最佳答案
是的,应该可以。但不需要temp
变量。
for (i = 0; i < 10; i++) {
fread(&(aStruct[i].x), sizeof aStruct[i].x, 1, inputFile);
fread(&(aStruct[i].y), sizeof aStruct[i].y, 1, inputFile);
}
当使用指针作为数组时,如果使用数组索引记号,则通常更为通俗易懂。
我使用了
sizeof aStruct[i].x
而不是sizeof(int)
以便它自动从结构声明中获取类型,而不是要求您在结构更改时保持它们同步。