fwrite()无法在二进制文件中写入整数 [英] fwrite() not working to write integer in binary file

查看:324
本文介绍了fwrite()无法在二进制文件中写入整数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以告诉我为什么该功能不起作用吗?我就是听不到...

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;

}

我必须在结构内部使用这些指针,因此无法删除它们.顺便说一句,我的问题仅在于那些integersfloat.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆