gpt4 book ai didi

c - 保持 C 中的更改

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:26 24 4
gpt4 key购买 nike

我正在开发一个类似数据库的应用程序,它存储一个包含以下内容的结构:

struct Dictionary
{
char *key;
char *value;

struct Dictionary *next;
};

如您所见,我使用链表来存储信息。但是当用户退出程序时,问题就开始了。我希望将信息存储在某个地方。所以我在考虑使用 fopen 将链表存储在永久或临时文件中,然后,当用户启动程序时,检索链表。下面是将链表打印到控制台的方法:

void PrintList()
{
int count = 0;
struct Dictionary *current;

current = head;

if (current == NULL)
{
printf("\nThe list is empty!");
return;
}

printf(" Key \t Value\n");
printf(" ======== \t ========\n");

while (current != NULL)
{
count++;
printf("%d. %s \t %s\n", count, current->key, current->value);
current = current->next;
}
}

所以我正在考虑修改此方法以通过 fprintf 而不是 printf 打印信息,然后程序将只从文件中获取信息。有人可以帮助我如何读写这个文件吗?它应该是什么类型的文件,临时文件还是常规文件?我应该如何格式化文件(就像我想先有键,然后是值,然后是换行符)?

最佳答案

该文件应该是常规的。临时文件不能保证在您下次启动应用程序时存在。此外,您的格式对人类来说看起来很好,对机器来说不太好。我建议创建您自己的二进制文件格式或使用 XML(或者 JSON?)。你可以很容易地格式化它,比如

key1\0value1\0key2\0value2\0....

我会写一个简单的例子是伪代码:

//To write...
Dictionary *this=begin_list;
while(this!=null){
for(i=0;i<strlen(this->key);i++){
write_byte(this->key[i]);
}
for(i=0;i<strlen(this->value);i++){
write_byte(this->value[i]);
}
this=this->next;
}

//to read...
Dictionary *prev;
Dictionary *this;
char *buffer;
while(!eof){
buffer=malloc(MAX_STRING_LEN);
int i=0;
this=malloc(sizeof(Dictionary)
while(i<MAX_STRING_LEN){ //note no error checking
buffer[i]=read_byte();
if(buffer[i]==0){
break;
}
}
this->key=buffer;
buffer=malloc(MAX_STRING_LEN)
while(i<MAX_STRING_LEN){ //note no error checking
buffer[i]=read_byte();
if(buffer[i]==0){
break;
}
}
this->value=buffer;
if(prev!=null){
prev->next=this;
}
this->next=null;
prev=this;
}

我知道这是一个糟糕的例子。我认为 scanf 或类似工具可能会使工作变得容易很多,但我的 C 技能越来越生疏了。

关于c - 保持 C 中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640788/

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