c语言 - 即使打开文件"rb+"它也不是用二进制写入



我声明了这个结构体:

typedef struct {
char *TITLE;
char *AUTHOR;
char *PUBLISHER;
int YEAR;
char *LANGUAGE;
int PAGES;
float PRICE;
} Book;  

我试图使用下面的函数在二进制中写入一个名为"BD_Books.bin":

的空文件中的书
void InsertBook(Book *L){
FILE *arq = fopen("BD_books.bin", "rb+");
if(arq == NULL){
    printf("ERROR WHILE OPENING FILE!!");
    return;
}
int regFile = -1;
fseek(arq, 0, SEEK_SET); //setting "pointer" to the beggining of file
fscanf(arq, "%d", &regFile); //reading first integer from file
if(regFile == -1){ //if the file is empty
        fwrite(L->TITLE, sizeof(char), strlen(L->TITLE), arq);
        fwrite(L->AUTHOR, sizeof(char), strlen(L->AUTHOR), arq);
        fwrite(L->PUBLISHER, sizeof(char), strlen(L->PUBLISHER), arq);
        fprintf(arq, "%d", L->YEAR);
        fwrite(L->LANGUAGE, sizeof(char), strlen(L->LANGUAGE), arq);
        fprintf(arq, "%d", L->PAGES);
        fprintf(arq, "%f", L->PRICE);
        return;
}  

我可以用我想要的方式来写所有的数据,但问题是我必须用二进制格式来写,但函数是作为文本来写的。
难道fopen("BD_books.bin", "rb+");不足以告诉fwrite()将所有数据写入二进制,因为我正在用"rb+"参数打开文件??

因为您需要使用fwrite()而不是fprintf(),所以fprintf()将字符串写入文件,其字节表示与它们的字符串表示相同。

尝试恰克

fprintf(arq, "%d", L->YEAR);

fwrite(&L->YEAR, sizeof(L->YEAR), 1, arq);

而且,sizeof(char)保证是1,所以使用它会给代码增加不必要的丑陋,使其更难阅读。

我认为应该是wb而不是rb,因为您正在写入文件

相关内容

  • 没有找到相关文章

最新更新