将值传递给C中的函数

时间:2011-08-17 17:27:16

标签: c function berkeley-db

我是C的新手并且已经工作了两个月。我的结构如下所示:

struct profile_t
{
    unsigned char length;
    unsigned char type;
    unsigned char *data;
};

typedef struct profile_datagram_t
{
    unsigned char *src;
    unsigned char *dst;
    unsigned char ver;
    unsigned char n;
    struct profile_t profiles[MAXPROFILES];
} header;

header outObj;

现在,结构元素中的值被读作outObj.src[i]outObj.dst[i]outObj.profiles[i].type

现在我想调用一个函数并将我读取的值传递给一个实际上是Berkeley DB的函数。

void main()
{
    struct pearson_record {
        unsigned char src[6];
        unsigned char dst[6];
        unsigned char type;
    };

    DB *dbp;
    int ret;

    if ((ret = db_create(&dbp, dbenv, 0)) !=0)
        handle_error(ret);

    if ((ret = dbp->open(dbp, NULL, "pearson.db", NULL, DB_BTREE, DB_CREATE, 0600)) !=0)
        handle_error(ret);

    const DBT *pkey;
    const DBT *pdata;

    struct pearson_record p;
    DBT data, key;

    memset(&key, 0, sizeof(DBT));
    memset(&data, 0, sizeof(DBT));

    memset(&s, 0, sizeof(struct pearson_record));

现在,通过查看数据库参考指南中的示例来编写上述代码。但我不明白什么是const DBT。他们还使用memcopy在结构中添加了值,我知道这是正确的方法,但现在我想memcopy传递上面提到的值并将它们存储在结构pearson_record中。我应该怎么做?任何形式的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

请发布完整的代码。你提到“他们的memcopy”(我假设你指的是memcpy),但我看到的只是一堆memset(*,0)。希望你不要混淆他们。

另外“他们使用memcopy在结构中添加了值,我知道这是正确的方法”并不完全正确。它不一定是错的,但是...... char *基本上被解释为C字符串。这是一个字节数组,表示必须为空终止的字符(即最后一个字符必须为0,相当于'\ 0')。复制字符串的正确方法是使用strcpy()(或windows上的strcpy_s),差异是memcpy更快,并在其他情况下使用(例如指针\缓冲区管理)。

unsigned char *没有这么用(至少我从未见过它)。作为一个注释阅读有关char,unsigned char,signed char,char []和char *(不是它以任何方式改变你的代码,而只是为了确保你理解这些差异)。

至于复制数据,我假设你的意思是src,dst和从pearson_record到header的类型,对吗?如果是这样,为了简单起见,我想建议memcpy,但你说每个元素都被访问为[i]。这是否意味着header.src是一个多个pearson_record.src的数组,或者header.src [i]对应pearson_record.src [i]?这对我来说有点不清楚。

char * src和char * * src之间存在差异。