在学习过程中出现了以下内容,我想知道它是否能达到预期的效果。假设我们具有以下结构:
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
数组将被文件中的内容填充?如果没有,我们该怎么办?
答案 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)
,以便它会自动从结构声明中选取类型,而不是要求您在结构更改时保持它们同步。