从C中的文件读取时如何使用指针填充结构数组

时间:2019-05-07 15:28:50

标签: c arrays pointers struct

在学习过程中出现了以下内容,我想知道它是否能达到预期的效果。假设我们具有以下结构:

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数组将被文件中的内容填充?如果没有,我们该怎么办?

1 个答案:

答案 0 :(得分:2)

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