Доступ к значениям внутри структуры в Berkeley DB с помощью C - PullRequest
1 голос
/ 25 августа 2011

Я хочу иметь целочисленное значение для моего "key.data" в Беркли БД. Поскольку мы используем структуры DBT в Berkley DB, и он имеет «Указатель на строку байтов», я создал структуру для ключа с помощью memeber int. Но теперь я сталкиваюсь с проблемой доступа к значению, хранящемуся внутри структуры. Ниже мой код:

                             struct pearson_key{
                                  int k;
                           };
                             struct pearson_key keyStruct; 
                             DBT key
                             memset(&key, 0, sizeof(key));
                             memset(&keyStruct, 0, sizeof(struct pearson_key));
                             int k = 1;
                             keyStruct.k = k;
                             key.data = &keyStruct;
                             printf("value = %s",(char*)keyStruct);
                             key.size = sizeof(keyStruct);

Это печать пустого значения. Я новичок в C и структурах. Я знаю, что где-то не так со структурами, но не знаю, как это исправить. Заранее спасибо.

Ответы [ 2 ]

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

Это должно быть:

printf("value = %d", keyStruct.k);

Потратьте время на чтение структур C, указателей и синтаксиса printf.

struct pearson_key{ 
  int k;
};
struct pearson_key keyStruct; 
DBT key;
memset(&key, 0, sizeof(key));
memset(&keyStruct, 0, sizeof(struct pearson_key));
keyStruct.k = 1;
key.data = &keyStruct;
key.size = sizeof(keyStruct);
printf("value = %d", keyStruct.k);
0 голосов
/ 25 августа 2011

Если я прав, вы хотите получить доступ к целочисленному значению через ваш key. Теперь ваш ключ имеет указатель на строку байтов. Я не уверен, думаю, это может быть пустой указатель (void *), чтобы он мог указывать на данные любого типа.

В любом случае вы можете сделать следующее (предполагая, что то, что я сказал выше, верно):

key.data = (struct pearson_key *) &keyStruct;

для доступа к значению:

Value = (key.data)->k
...