2011-11-14 37 views
2

我正在從製作爲DBD的文件系統中更改。如何將具有字符指針的C結構插入到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文件的最有效方法,考慮性能。

坦率地說,我不夠精通。請儘可能詳細地描述爲 。

謝謝〜

+0

你可以添加一些關於什麼是DBD文件的初始信息? –

回答

0

我想你可以嘗試設置默認值,爲你構建

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; 
} 

希望這可以幫助

+0

....無論如何,謝謝你的回覆〜 – user1044764

2

如果你想插入以下結構:

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' 來存儲您的key/data到BDB和free(P)

讀,回數據,讀取字符串的大小,malloc的所需的存儲和讀取字符串本身

+0

謝謝,Pierre ~~~ :) – user1044764

0

您的數據需要進行序列化。在你的問題中你已經完成了一次。 對於許多類型的記錄來說,這是一個精通C++和BDB的人的任務(我之前已經做過)。你似乎表示你不熟練。所以如果你想自己做,你將不得不轉換每個聽起來單調的結構(你說有太多),但至少它需要更少的技能。

您正在尋找的解決方案太複雜,無法在此處發佈,並且時間太長。