fwrite()无法在二进制文件中写入整数 [英] fwrite() not working to write integer in binary file
问题描述
有人可以告诉我为什么该功能不起作用吗?我就是听不到...
Can someone tell my why won't this function work? I just can't get it...
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;
}
我必须在结构内部使用这些指针,因此无法删除它们.顺便说一句,我的问题仅在于那些integers
和float
.
I have to use those pointers inside the struct, so I can't remove them. By the way, my problem is only with those integers
and the float
.
仅当我使用fprintf()
编写所有整数和浮点数(年份,页数和价格)时,此功能才能正常工作,但我将其写入二进制文件中,当然我想将其写入二进制文件中,因此我尝试使用fwrite().
This fuction is only working properly if I write all the integers and floats (YEAR, PAGES and PRICE) with fprintf()
, but I'm writing it in a binary file, and of course I want to write it in binary, so I'm trying to use fwrite().
另一件事是:编译器将incompatible type for argument 1 of 'fwrite'
指向此行:fwrite(L->PRICE, sizeof(float), 1, arq);
Another thing is: the compiler is pointing incompatible type for argument 1 of 'fwrite'
at this line: fwrite(L->PRICE, sizeof(float), 1, arq);
有人可以告诉我发生了什么事吗? 我的程序在尝试写入文件时崩溃...
Can someone explain me what is happening? My program crashes when it tries to write in the file...
推荐答案
fwrite的第一个参数需要一个指针.
The first parameter of fwrite expects a pointer.
以下行:
fwrite(L->PAGES, sizeof(int), 1, arq);
应写为:
fwrite(&(L->PAGES), sizeof(int), 1, arq);
Sames适合该结构的YEAR和PRICE成员
Sames goes for YEAR and PRICE members of that struct
fwrite(&(L->YEAR), sizeof(int), 1, arq);
...
fwrite(&(L->PRICE), sizeof(float), 1, arq);
请注意,您不需要对TITLE,PUBLISHER和AUTHOR进行相同的更改,因为这些成员字段的类型已经是指针(char *).
Note, you don't need to make the same change for TITLE, PUBLISHER, and AUTHOR because the type of those member fields are already pointers (char*).
这篇关于fwrite()无法在二进制文件中写入整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!