大家好,很抱歉问,但我可以找到任何合适的解决方案。我正在研究一个文件系统,我将每个文件节点作为键值对保存在 GDBM 数据库中。我有一个具有一些属性的结构,我将其转换为字节数组
结构mystruct:
typedef struct nold{
char* name;
char* surname;
int age;
}mystruct;
我将其转换为字节数组
dead.name="john";
dead.surname="doe";
dead.age=22;
//copy bytes of the our struct
char buffer[sizeof(dead)];
memcpy(buffer, &dead, sizeof(dead));
为了存储在数据库中,我们使用如下数据结构:
typedef struct {
char *dptr;
int dsize;
} datum
我填写基准结构如下:
//create a key datum
char* k="file.txt";
key.dptr=k;
key.dsize=strlen(k)+1;
//create a value datum here I assign bytes
value.dptr=buffer;
value.dsize = sizeof(dead);
现在我将 GDBM 存储为键值对
然后在另一个文件中,我读取了我存储的数据并尝试将其重新转换为结构
datum result;
//read
result=gdbm_fetch(file,key);
char* bytes=result.dptr;
mystruct* reborn;
reborn=(mystruct*)bytes;
//print from our new struct
printf("%s\n",reborn->name);
printf("%s\n",reborn->surname);
printf("%d\n",reborn->age);
它打印以下内容:
E���D$�$ˈ�k����E��
$�$ˈ�k����E��
22
它设法恢复结构,但 char* 的数据丢失了。仅涵盖整数数据。知道为什么会这样吗?如何解决?它不能通过存储字节数组来解决,如何将字节数组转换为十六进制或 base64 并将其存储。
我真的在努力解决这个问题。提前谢谢你。