Таблица в моей базе данных имеет один столбец типа BLOB-объектов. Я использую его для хранения следующей структуры:
struct a
{
int x;
string y;
} ;
Я написал функцию C ++ для извлечения этого большого двоичного объекта с использованием переменной структуры, упомянутой выше. Для этого я использую функцию cass_value_get_bytes.
Проблема в том, что я получаю ошибку сегментации, если я использую вышеупомянутую структуру. Однако, если я изменю тип строки на массив символов, проблема решится.
Я не могу понять, почему я не могу использовать строковую переменную, так как намного лучше использовать строку, чем массив символов.
Функции cass_value_get_string()
а также cass_value_get_bytes()
вернуть указатель в буфер, время жизни которого связано с CassResult
, Когда результат удаляется, так же как и память значений. Вам необходимо скопировать память в буфер строки. cass_value_get_string()
может также использоваться для блобов, и это позволяет избежать необходимости делать reinterpret_cast<>
, Вы можете сделать что-то вроде следующего:
#include <cassandra.h>
#include <string>
std::string to_string(CassValue* value) {
const char* str;
size_t len;
cass_value_get_string(value, &str, &len);
return std::string(str, len);
}
struct SomeData {
int x;
std::string y;
};
int main() {
SomeData data;
CassValue* value = NULL; /* This needs to be set from the result */
data.y = to_string(value);
}
Других решений пока нет …