fwrite()无法在二进制文件中写入整数

Qui*_*k19 0 c binary file 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;
}  
Run Code Online (Sandbox Code Playgroud)

struct Book声明如下:

typedef struct {
    char *TITLE;
    char *AUTHOR;
    char *PUBLISHER;
    int YEAR;
    char *LANGUAGE;
    int PAGES;
float PRICE;
} Book;
Run Code Online (Sandbox Code Playgroud)

主要

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;
Run Code Online (Sandbox Code Playgroud)

}

我必须在结构中使用那些指针,所以我无法删除它们.顺便说一句,我的问题只有那些integers和那些float.

如果我写了所有的整数和浮点数(YEAR,PAGES和PRICE)fprintf(),这个函数只能正常工作,但是我用二进制文件写它,当然我想用二进制写它,所以我正在尝试使用fwrite().

另一件事是:编译器指向incompatible type for argument 1 of 'fwrite'这一行:fwrite(L->PRICE, sizeof(float), 1, arq);

有人能解释我发生了什么吗?我的程序在尝试写入文件时崩溃了......

sel*_*bie 7

fwrite的第一个参数需要一个指针.

行如下:

fwrite(L->PAGES, sizeof(int), 1, arq);
Run Code Online (Sandbox Code Playgroud)

应写成如下:

fwrite(&(L->PAGES), sizeof(int), 1, arq);
Run Code Online (Sandbox Code Playgroud)

Sames适用于该结构的YEAR和PRICE成员

fwrite(&(L->YEAR), sizeof(int), 1, arq);
...
fwrite(&(L->PRICE), sizeof(float), 1, arq);
Run Code Online (Sandbox Code Playgroud)

注意,您不需要对TITLE,PUBLISHER和AUTHOR进行相同的更改,因为这些成员字段的类型已经是指针(char*).