Ошибка не имеет ничего общего с содержимым структуры данных. Есть очень мало способов, которыми эта функция может потерпеть неудачу. Следующая версия позволит вам выяснить, в чем дело.
int loadPerson(PERSON *person, char *fileName){
FILE *file;
int result = 0;
file = fopen(fileName,"rb");
if (file){
if(fread(person,sizeof(PERSON),1,file)>0){
result = 1;
}else{
printf("File read error!");
}
}else{
printf("File not found: %s", fileName);
}
return result;
}
Либо файл, который вы пытаетесь открыть, не существует, либо он не содержит достаточно данных для чтения одной структуры. В любом случае будет напечатано сообщение об ошибке.
(«Файл не найден», скорее всего, потому что файл находится в одном каталоге, а ваша программа выполняется с другим параметром текущий каталог . Вам нужно взглянуть на свою среду разработки, чтобы исправить это «Ошибка чтения файла» сразу после успешного открытия файла , вероятно, означает, что файл, из которого вы пытаетесь прочитать, не содержит достаточно байтов для чтения одной структуры PERSON
. Вы должны получить возврат значение 1
из fread
, если он читает один элемент. Проверьте размер вашего файла.)
Конечно, если функция завершается успешно, вызывающему коду все равно нужно это знать. Ваш код не возвратил значение, даже если функция была объявлена как возвращающая int
. Я позволил себе вернуть стоимость, которую вы явно намеревались использовать для этой цели. Я рекомендую вам внимательно посмотреть, почему ваш компилятор не предупредил вас об этой серьезной проблеме ... или, если это так, почему вы проигнорировали это.