1

有人可以指导我吗,

我似乎无法正确阅读我的 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;
}
4

1 回答 1

3

您似乎不了解“指针”到底是什么以及如何使用它。

然后,sqlite3_column_bytes返回intnot 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] );

就是这个。

于 2013-11-13T17:25:34.637 回答