如何复制具有const unsigned char *类型的值?

时间:2012-03-29 18:06:52

标签: c sqlite char const

我想在缓冲区中存储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(),但我收到同样的错误消息。

3 个答案:

答案 0 :(得分:4)

strdup;

很容易
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()为止。”因此,正如其他人所说,您可能想要分配内存和副本(strdupmallocstrcpy)。