Может ли кто-нибудь сказать мне, почему эта функция не работает? Я просто не могу получить его ...fwrite() не работает, чтобы написать целое число в двоичном файле
void writeRegister(FILE *arq, Book *L){ //writes in actual file position
char c = '|';
int sizeRegWrite = reglen(L); //reglen() returns the size of Book
fwrite(&sizeRegWrite, sizeof(int), 1, arq);
fwrite(L->TITLE, sizeof(char), strlen(L->TITLE), arq);
fwrite(&c, sizeof(char), 1, arq); //writing delimiter
fwrite(L->AUTHOR, sizeof(char), strlen(L->AUTHOR), arq);
fwrite(&c, sizeof(char), 1, arq); //writing delimiter
fwrite(L->PUBLISHER, sizeof(char), strlen(L->PUBLISHER), arq);
fwrite(&c, sizeof(char), 1, arq); //writing delimiter
fwrite(L->YEAR, sizeof(int), 1, arq);
fwrite(&c, sizeof(char), 1, arq); //writing delimiter
fwrite(L->LANGUAGE, sizeof(char), strlen(L->LANGUAGE), arq);
fwrite(&c, sizeof(char), 1, arq); //writing delimiter
fwrite(L->PAGES, sizeof(int), 1, arq);
fwrite(&c, sizeof(char), 1, arq); //writing delimiter
fwrite(L->PRICE, sizeof(float), 1, arq);
fwrite(&c, sizeof(char), 1, arq); //writing delimiter
return;
}
структура книги объявлен как это:
typedef struct {
char *TITLE;
char *AUTHOR;
char *PUBLISHER;
int YEAR;
char *LANGUAGE;
int PAGES;
float PRICE;
} Book;
Главная
int main() {
FILE *arq = fopen("BD_books2.bin", "rb+");
if(arq == NULL)
printf("Error while opening file!!!");
Book L;
readData(&L); //Reads all fields from keyboard and places in Book. Working properly
writeRegister(arq, &L);
system("pause");
return 0;
}
I должны использовать эти указатели внутри ruct, поэтому я не могу их удалить. Кстати, моя проблема связана только с теми integers
и float
.
Эта функция работает только в том случае, если я записываю все целые числа и плавающие числа (YEAR, PAGES и PRICE) с fprintf()
, но я пишу его в двоичном файле и, конечно, хочу записать его в двоичном формате, поэтому я пытаюсь использовать fwrite().
Другое дело: компилятор указывает incompatible type for argument 1 of 'fwrite'
на этой линии: fwrite(L->PRICE, sizeof(float), 1, arq);
Может кто-нибудь объяснить мне, что происходит? Моя программа вылетает, когда она пытается записать в файл ...
опущено 'неудобно readData' и' reglen' может хорошо играть в эту. Любые причины, в частности, вы решили не включать их, если не по какой-либо причине, кроме как закончить [MCVE] (https://stackoverflow.com/help/mcve)? – WhozCraig
BTW: Вместо 'fwrite (& sizeRegWrite, sizeof (int), 1, arq);', рассмотрим модель 'fwrite (& var, sizeof var, 1, arq);' – chux
Анализ синтаксического анализа звучит как полный кошмар; вы смешиваете двоичные данные с разделителями ASCII. Могу ли я предложить либо придерживаться текстового формата (используя 'fprintf' для записи каждой строки и' fscanf' для чтения файла), либо более структурированный двоичный формат (например, строки с префиксом длины)? – nneonneo