Бинарный файл не читается fread() - C (СИ)
Формулировка задачи:
инициализированную структуру записываю в файл,хочу ее прочитать из файла и записать в другую структуру.Записывается в файл нормально,а считывать из файла не хочет,срабатывает проверка и выводит Error read file! ,а printf() выводит мусор.
Если же вместо строки 36 вставляю вот это
то нормально работает.
Что не так с режимом открытия файла "a + b"?Он ведь должен позволять чтение а также запись в конец файла.
fclose(fp); fp = fopen(FILENAME, "rb");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXNAME 27
#define MAXSTREET 14
#define MAXKOS 18
#define FILENAME "stadium.dat"
struct adress
{
char street[MAXSTREET];
short building;
};
struct stadium
{
char name[MAXNAME];
struct adress where;
int capacity;
char kinds_of_sports[8][MAXKOS];
};
int main()
{
struct stadium Millenium = {"Millenium", {"Wembley", 27}, 75000,{"High jump","long jump","Running hurdles",
"javelin-throwing","baseball","football",
"pole vaulting","shot put"} };
struct stadium *stad;
struct stadium A[4];
stad = &Millenium;
//stad2 = &A[1];
FILE *fp;
fp = fopen(FILENAME, "a + b");
if(!fp)
fputs("Error opening file!", stderr);
rewind(fp);
if(1 != fwrite(stad, sizeof(struct stadium), 1, fp))
puts("Error write file!");
rewind(fp);
if(1 != fread(A, sizeof(struct stadium), 1, fp))
puts("Error read file!");
printf("%s %s %d %d %s %s\n", A[0].name, A[0].where.street, A[0].where.building,
A[0].capacity, A[0].kinds_of_sports[0],A[0].kinds_of_sports[7]);
return 0;
}Решение задачи: «Бинарный файл не читается fread()»
textual
Листинг программы
"ab+"