我想在缓冲区中存储SQLite数据库中的一些值,但qlite3_column_text()包含以下原型:
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
然后当我这样做:
out[size] = sqlite3_column_text(stmt, 0);
我收到以下错误消息:
assignment discards qualifiers from pointer target type
我也尝试使用strcpy()
,但我收到同样的错误消息。
答案 0 :(得分:4)
out[size] = strdup((const char*)sqlite3_column_text(stmt, 0));
请注意,这将使malloc复制,因此您必须在指针上调用free()以防止泄漏。
当然这假设你的out
数组可以存储char *类型的值,你没有显示它是如何定义的。
答案 1 :(得分:1)
// Should work?
#define BUF_SIZE 512
char buffer[BUF_SIZE];
strncpy( buffer, (const char*)sqlite3_column_text(stmt, 0), BUF_SIZE);
buffer[BUF_size-1] = '\0';
答案 2 :(得分:1)
您正在尝试将unsigned char*
分配给非指针类型。你应该做点什么:
const unsigned char * out = sqlite3_column_text(stmt, 0);
printf(out);
更大的问题是你想要对这些数据和指针的生命周期做些什么。来自sqlite.org的注释“返回的指针有效,直到如上所述发生类型转换,或直到调用sqlite3_step()或sqlite3_reset()或sqlite3_finalize()为止。”因此,正如其他人所说,您可能想要分配内存和副本(strdup
或malloc
和strcpy
)。