我希望将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()
,但我得到了相同的错误信息。
发布于 2012-03-30 02:13:07
使用strdup
很容易;
out[size] = strdup((const char*)sqlite3_column_text(stmt, 0));
请注意,这将对副本进行malloc,因此您必须稍后在指针上调用free()以避免泄漏。
当然,这里假设您的out
数组可以存储char*类型的值,您并没有展示它是如何定义的。
发布于 2012-03-30 02:11:21
// 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';
发布于 2012-03-30 02:13:16
您正在尝试将unsigned char*
赋值给非指针类型。你应该这样做:
const unsigned char * out = sqlite3_column_text(stmt, 0);
printf(out);
一个更大的问题是,您想如何处理这些数据和指针的生命周期。来自sqlite.org的注释:“返回的指针在发生如上所述的类型转换之前有效,或者在调用sqlite3_step()、sqlite3_reset()或sqlite3_finalize()之前有效。”因此,正如其他人所说,您可能希望分配内存并进行复制(strdup
或malloc
和strcpy
)。
https://stackoverflow.com/questions/9930921
复制相似问题