Как я могу вставить структуры C, которые имеют символьные указатели в файл DBD - PullRequest
2 голосов
/ 14 ноября 2011

Я перехожу из файловой системы, которую я превратил в DBD.

И у меня не было выбора конвертировать структуры, которые имеют члены-символы вставить эти структуры в файл DBD

за экзамен, Если есть структура, как показано ниже

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, учитывая производительность.

Честно говоря, я не опытный. пожалуйста, опишите как можно более конкретно.

Спасибо ~

Ответы [ 3 ]

2 голосов
/ 14 ноября 2011

, если вы хотите вставить следующую структуру:

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)

для чтения, возврата данных, чтения размера строки, выделения необходимой памяти и чтения самой строки

0 голосов
/ 04 января 2012

Ваши данные необходимо сделать сериализуемыми. Вы сделали это в одном случае в своем Вопросе. Сделать это в общих чертах для многих типов записей - задача для тех, кто владеет C ++ и BDB (я делал это раньше). Вы, казалось, указали, что вы не были опытными. Поэтому, если вы хотите сделать это самостоятельно, вам придется преобразовать каждую структуру, которая звучит монотонно (вы сказали, что их было слишком много), но, по крайней мере, для этого требуется меньше навыков.

Решение, которое вы ищете, слишком сложное для создания и слишком длинное для публикации здесь.

0 голосов
/ 14 ноября 2011

Я думаю, вы можете попробовать установить значения по умолчанию для вашей структуры

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

, надеюсь, это поможет

...