Почему файл пустой?

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Вроде бы делаю всё верно...
Объявлен массив структур

C++:
struct book {
int index;
char title[20];
char autor[20];
int publdate;
int number;
} lib [SIZE];
Заполняю массив

C++:
	cout << "Порядковый номер книги -> ";
cin >> lib[i].index;
cout << "Название книги -> ";
cin >> lib[i].title;
cout << "Автор книги -> ";
cin >> lib[i].autor;
cout << "Год издания книги -> ";
cin >> lib[i].publdate;
cout << "Количество -> ";
cin >> lib[i].number;
Дальше сохраняю в бинарном режиме

C++:
  FILE *out;
char fname[20];
printf("Введите имя файла\n");
scanf("%s", &fname);
if ((out = fopen (fname, "wb")) == NULL)
{
printf("Ошибка открытия файла\n"); 
getch();
return;  
}
fwrite(&lib, sizeof(lib), SIZE, out);
fclose(out);
 

Вложения

Y

Yerty

#2
Незнаю, он может потому что есть '\0' тогда несохраняется. Я :)
 
R

RocknRolla

#3
Попробуй напистаь функцию для записи структуры в файл:
void writestructure(ofstream out, strutct lib)
{
out<<lib.index;
/*----
*/
}
 
A

astronom

#4
Выделяйте временный буфер, туда, в цикле, копируйте по одной структуре и сохраняйте в файл.
Ибо, где гарантия, что память под структуру выделяется непрерывно?
 
A

Ambroyz

#5
сразу вижу 1 ошибку: прототип функции записи в файл
Код:
size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
1й аргумент указатель на буфер, в Вашем коде указатель на указатель первый элемент, т.к. имя массива является указателем
К тому же, хотя бы лично для себя поставили проверку возврашаемого значения этой функции, оно покажет сколько функция записала в файл.

2astronom
Насколько я помню, массивы всегда выделяются непрерывно, во всяком случаев виртуальном адресном пространстве.