gpt4 book ai didi

c - 从二进制文件读取和写入 malloc 链表

转载 作者:太空狗 更新时间:2023-10-29 15:01:01 27 4
gpt4 key购买 nike

我需要为我正在上的类(class)做作业。这是一个简单的 C 语言电话簿应用程序,我在使用它时遇到了一些麻烦,因为我需要在程序中使用一些新东西,而且截止日期非常紧迫。

我环顾四周,找到了一些答案,但每次都会出现新的答案。 :)

这是我的(简化的)程序:

typedef struct record
{
char fname[31];
char lname[31];
char tel[21];
struct record *next;
} record;


record *new_entry(record *first, char *fname, char *lname, char *tel)
{
record *new;
new=(record*) malloc(sizeof(record));
strcpy(new->fname, fname);
strcpy(new->lname, lname);
strcpy(new->tel, tel);
new->next=first;
}


void fileopen (char *db_file)
{
FILE *fp;

fp=fopen(db_file, "rb");
if (fp==NULL)
{
fp=fopen(db_file, "wb");
fclose(fp);
fp=fopen(db_file, "r+b");
}
}



int main
{
char db[51];
record *next = NULL;

printf("File: "); scanf("%s, db);
fileopen(db);
printf("First name: "); scanf("%s", fname);
printf("Last name: "); scanf("%s", lname);
printf("Phone number: "); scanf("%s", tel);
first=new_entry(*first, fname, lname, tel);
}

我省略了不重要的部分。现在我知道这并不多,但是我的类长说我应该使用二进制文件来存储和恢复数据。但是我真的很困惑我应该如何使用 fread 和 fwrite。


非常感谢您的解决方案!我想我开始理解这个概念了。该程序现在存储数据(至少我认为是这样,因为随着我添加更多数据,文件不断增长。)当启动一个新的二进制文件时,程序会在请求时正确显示数据,但如果我关闭它并重新打开同一文件,当它尝试列出联系人时没有任何反应。

这是(再次简化,我在实际作业中一条记录中有 10 个详细信息)打开函数:

record *open (char *db_file, record start)
{
FILE *fp
record *temp = start;
fp=fopen(db_file, "rb");
while (fread(temp, sizeof(rekord), 1, fp)>0)
{
fread(temp->fname, sizeof temp->fname, 1, fp);
fread(temp->lname, sizeof temp->lname, 1, fp);
fread(temp->tel, sizeof temp->tel, 1, fp);
temp=temp->next;
}
fclose(fp);
return temp;
}

在 main() 中,我使用:

start=open(db, start);

声明部分:

record *start=NULL;

如果有人回复,再次感谢。

最佳答案

要将链表写入文件,您可以遍历链表并编写结构。

#include <stdio.h>

record *it = first;

while (it != NULL) {
fwrite (it->fname, sizeof it->name, 1, stream);
fwrite (it->lname, sizeof it->lname, 1, stream);
fwrite (it->tel, sizeof it->tel, 1, stream);
it = it->next;
}

stream 是一个文件,您可以在 fopen 中使用 wb 模式打开。

关于c - 从二进制文件读取和写入 malloc 链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13330482/

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