У меня есть следующие структуры в C:
typedef struct sUser {
char name[nameSize];
char nickname[nicknameSize];
char mail[mailSize];
char address[addressSize];
char password[passwordSize];
int totalPoints;
PlacesHistory history;
DynamicArray requests;
}User;
typedef struct sPlacesHistory {
HistoryElement array[HistorySize];
int occupied;
int last;
}PlacesHistory;
и функции:
void serializeUser( User * user, FILE * fp ) {
fwrite( user, nameSize + nicknameSize + mailSize + addressSize + passwordSize + sizeof( int ) + sizeof( PlacesHistory ), 1, fp );
serializeDynamicArray( user -> requests, fp );
}
User * loadUser( FILE * fp ) {
User * user = malloc( sizeof( User ) );
fread( user, nameSize + nicknameSize + mailSize + addressSize + passwordSize + sizeof( int ) + sizeof( PlacesHistory ), 1, fp );
user -> requests = loadDynamicArray( fp );
return user;
}
Когда я загружаю структуру User и я печатаю этого пользователя (загружается из файла)поле "last" of placeHistory имеет значение 255 или -1, в зависимости от порядка полей структуры PlacesHistory.Но у пользователя, которого я сохранил, было -1 на этом члене.
Так что, когда я получаю 255, это явно неправильно ... Я подозреваю, что это связано с заполнением структуры.
Как я могу это сделатьэто так, что порядок полей в структуре не имеет значения?
Или каким критериям я должен следовать, чтобы все работало правильно?
Нужно ли переписывать / обрабатывать по одному элементу за раз??(Я хотел бы избежать этого из соображений эффективности)
Нужно ли сначала сериализовать в массив вместо файла?(Надеюсь, что нет .. потому что это подразумевает заранее знать размер всех моих структур из-за неправильно размещенного массива, что означает дополнительную работу, создающую функцию для каждой непростой структуры, чтобы узнать ее размер)
Примечание: *Размер определяемых констант
Примечание 2: DynamicArray - указатель на другую структуру.