Привет, поэтому я разработал структуру для медицинской карты и хотел создать функции для чтения и записи в файл. Я пытался использовать fread()
и fwrite()
для этой цели, но он не делает это правильно. Когда я пытаюсь снова прочитать файл, он просто возвращает непригодные данные, такие как фрагменты путей к файлам. В основном, случайные места в памяти.
Вот мой код для записи в двоичный файл:
void savePatientProfile(struct healthRecord *hrptr, char *file_name) {
FILE *fp;
struct healthRecord hr;
hr = *hrptr;
fp = fopen(file_name, "wb");
fwrite(&hr, sizeof(struct healthRecord), 1, fp);
}
Вот код для чтения файла:
struct healthRecord *readPatientProfile(char *file_name) {
FILE *fp;
struct healthRecord *hrptr;
fp = fopen(file_name, "rb");
hrptr = malloc(sizeof(struct healthRecord));
fread(hrptr, sizeof(struct healthRecord), 1, fp);
return hrptr;
}
Код для моей структуры и основной функции:
int main() {
struct healthRecord *hrptr = getPatientProfile();
savePatientProfile(hrptr, "test.bin");
struct healthRecord *hrptr2 = readPatientProfile("test.bin");
showPatientProfile(hrptr2);
return 0;
}
struct healthRecord {
// Store first & last name with maximum length of 50
char first_name[MAX_STR_LEN];
char last_name[MAX_STR_LEN];
// Store date of birth
struct birth_date {
// Define date variable, max value is 2047
unsigned int year : 11;
// Define month variable, max value is 15
unsigned int month : 4;
// Define day variable, max value is 31
unsigned int day : 5;
} birth_date;
// Store gender; 0 for male, 1 for female
unsigned int gender : 1;
// Store height in cm; max possible height 255cm
unsigned int height : 8;
// Store weight and BMI
float weight;
float bmi;
// Store address in another struct
struct address {
char city[MAX_STR_LEN];
char street_name[MAX_STR_LEN];
// Store street number as string, in case of special characters, e.g. 2A
char street_number[6];
// Store postcode; 5 digits + terminating character
char postcode[6];
} address;
// Store vaccination History; Values can only be 0 for no and 1 for yes
struct vaccination_history {
unsigned int yellow_fever : 1;
unsigned int hepatitis : 1;
unsigned int malaria : 1;
unsigned int bird_flue : 1;
unsigned int polio : 1;
} vacc_history;
// Store additional information depending on the patient type
// Can either store value or n/a if type does not match
union additional_information {
// Store sodium level for adult man
char sodium_level[4];
// Store potassium level for adult woman
char potassium_level[4];
// Store school(preschool, preschool class, comprehensive school) for a child (< 16)
struct school {
char preschool[MAX_STR_LEN];
char preschool_class[MAX_STR_LEN];
char comprehensive_school[MAX_STR_LEN];
} school;
} add_info;
};
Я не настолько знаком с чтением и записью в файлы в C, а код, который я использовал, был в основном из других постов здесь, посвященных stackoverflow и некоторые другие онлайн-ресурсы, такие как tutorialspoint. Буду очень признателен, если вы поможете мне с этим.