Как заполнить массив структур с помощью указателя при чтении из файла в C - PullRequest
1 голос
/ 07 мая 2019

во время учебы появилось следующее, и мне хотелось бы, чтобы он делал то, что должен.Допустим, у нас есть следующая структура:

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 Ответ

2 голосов
/ 07 мая 2019

Да, это должно работать. Но нет необходимости в переменной 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), чтобы он автоматически выбирал тип из объявления структуры, а не требовал, чтобы вы синхронизировали их при изменении структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...