gpt4 book ai didi

c - C 语言对二进制文件进行写入和读取

转载 作者:行者123 更新时间:2023-11-30 15:48:37 24 4
gpt4 key购买 nike

我被分配管理一家音乐商店。在数据库(保存为 .dat 文件)中,我们有艺术家姓名和专辑。

我在写入和读取文件时遇到问题。首先,即使我不写任何东西,只是创建文件,然后在记事本中打开该文件,我也会看到乱码和中文或日文字母。即使我写入失败,或使用 Visual Studio 读取失败,这似乎也没有改变。这是我的代码:

我打开文件:

p=fopen("database.dat","w+");

添加项目功能:

void add_item(char* artist,char* record,FILE* p) //adds an item with artist and record to store
{
item node;
int item_size=sizeof(item);
rewind(p);
strcpy(node.artist,artist);
strcpy(node.record,record);
fwrite(&node,item_size,1,p);
printf("Data added\n");
}

item 是用于定义商店中单个项目的结构。它有 2 个字段,字符串艺术家和字符串记录。

typedef struct item
{
char artist[100],record[100];
}item;

这是供阅读的:

void print_file(FILE* p) //print the entire file
{
int size=sizeof(item);
item node;
rewind(p);
while(!feof(p))
{
fread(&node,size,1,p);
printf("%s - %s\n",node.artist,node.record);
}
}

如果我使用 print_file,我会看到乱码,如果我实际上用记事本打开文件,我会看到日语。

救命啊! :D

编辑:刚刚发现了一些东西。如果我添加一个项目,然后读取该文件,我将读取该项目。但是,如果我再次运行该程序,并尝试立即读取该文件,我会看到乱码。

最佳答案

问题出在“w+”,它会将现有文件截断为零长度并打开它进行写入和读取。当您第二次运行该程序时,就会发生这种情况,并且您的读取(写入之前)返回乱码。有关 fopen 的更多信息 here

关于c - C 语言对二进制文件进行写入和读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16725951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com