我怎么能插入C结构有字符指针到DBD文件



我正在将一个文件系统更改为DBD。

并且我没有选择转换具有字符点成员的结构将这些结构插入DBD文件

examble

,如果有如下结构

typedef struct
{
    int   IndexKey;
    int   groupID;
    char* name;
    char* pNum;
    char* pAddr;
    char* pMemo;
} TsomeRec;

我做了一个结构转换如下

typedef struct
{
    int   IndexKey;
    int   groupID;
    char  name[MAX_NAME_LEN];
    char  pNum[MAX_NUM_LEN];
    char  pAddr[MAX_ADDR_LEN];
    char  pMemo[MAX_MEMO_LEN];
} TsomeRec2;

但是,要转换的结构太多了。

因此,考虑到性能,我正在寻找将这些结构插入DBD文件的最有效方法。

坦率地说,我并不精通。请尽可能详细地描述。

谢谢~

如果您想插入以下结构:

struct S
{
char* string1;
char* string2;
}

char* p=malloc( (sizeof(size_t) + strlen(s.string1)+ sizeof(size_t) + strlen(s.string2));
size_t i=0;
size_t len1=strlen(s.string1);
memcpy(&len1,&p[i],sizeof(size_t)); i+=sizeof(size_t);
memcpy(&s.string1,&p[i],strlen(s.string1)); i+=strlen(s.string1);
size_t len2=strlen(s.string2);
memcpy(&len2,&p[i],sizeof(size_t)); i+=sizeof(size_t);
memcpy(&s.string2,&p[i],strlen(s.string1)); i+=strlen(s.string2);    

然后,使用'p'将键/数据存储到BDB中并释放(p)

读取,返回数据,读取字符串的大小,malloc所需的内存并读取字符串本身

我想你可以尝试为你的结构设置默认值

struct a
{
    a() : i(X),j(Y){}
    int i;
    int j;
};

或在结构

中进行枚举
struct X {
enum Colour { red, blue } colour;
};
int main(void)
{
struct X x;
x.colour = blue;
return 0;
}

希望这对你有所帮助

您的数据需要序列化。在你的问题中,你已经这样做了一次。对于许多类型的记录,要以通用的方式做到这一点,对于精通c++和BDB的人来说是一项任务(我以前做过)。你似乎表明你并不精通。因此,如果你想自己做,你将不得不转换每个结构听起来单调(你说有太多了),但至少它需要较少的技能。

你正在寻找的解决方案太复杂,无法生产,太长,不能张贴在这里。

相关内容

  • 没有找到相关文章

最新更新