gpt4 book ai didi

c++ sqlite3 读取 blob 将不起作用

转载 作者:行者123 更新时间:2023-11-30 02:51:05 26 4
gpt4 key购买 nike

谁能指导我,

我似乎无法正确读取我的 blob。

我不知道出了什么问题,有人可以帮忙吗?

这是我的功能:

我想做的是:

以二进制形式读取 bob 并将字节存储在 char *data 中;

有人可以帮忙吗?

    int baramdb::dbreadblob(int pid)
{
sqlite3_stmt *res;

const char *tail;
int count = 0;
this->dbopen(this->dbfile);

if (sqlite3_prepare_v2(this->db, "SELECT * FROM Packet_Send_Queue", 128, &res, &tail) != SQLITE_OK)
{
printf("[Baram] Can't retrieve data: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return(1);
}

while (sqlite3_step(res) == SQLITE_ROW)
{

int *plength = 0;
*plength = sqlite3_column_bytes(res, 2);

unsigned char **pbuffer = (unsigned char **)malloc(*plength);

memcpy(*pbuffer, sqlite3_column_blob(res, 0), *plength);
count++;
}

sqlite3_close(this->db);
this->lastresult = count;

return count;
}

最佳答案

看来你不明白“指针”到底是什么以及如何使用它。

然后,sqlite3_column_bytes 返回 int 而不是 int*:

int length = sqlite3_column_bytes(res, 2);

在当前情况下这是绝对不正确的:

unsigned char **pbuffer = (unsigned char **)malloc(*plength);

如果您使用的是 C++ - 尽量不要显式使用 malloc/new,而是使用智能指针或 STL 容器:

std::vector<char> data( length );

const char *pBuffer = reinterpret_cast<const char*>( sqlite3_column_blob(res, 2) );
std::copy( pBuffer, pBuffer + data.size(), &data[0] );

就是这个。

关于c++ sqlite3 读取 blob 将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19959551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com