下面是在学习的时候突然出现的,我想知道它是否做了它应该做的。假设我们有以下结构:

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)以便它自动从结构声明中获取类型,而不是要求您在结构更改时保持它们同步。

09-27 10:31