首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何复制具有常量无符号字符*类型的值?

如何复制具有常量无符号字符*类型的值?
EN

Stack Overflow用户
提问于 2012-03-30 02:06:52
回答 3查看 2.9K关注 0票数 2

我希望将SQLite数据库中的一些值存储在我的缓冲区中,但qlite3_column_text()具有以下原型:

代码语言:javascript
复制
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);

当我这样做的时候:

代码语言:javascript
复制
out[size] = sqlite3_column_text(stmt, 0);

我得到以下错误消息:

代码语言:javascript
复制
assignment discards qualifiers from pointer target type

我也尝试过使用strcpy(),但我得到了相同的错误信息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-30 02:13:07

使用strdup很容易;

代码语言:javascript
复制
out[size] = strdup((const char*)sqlite3_column_text(stmt, 0));

请注意,这将对副本进行malloc,因此您必须稍后在指针上调用free()以避免泄漏。

当然,这里假设您的out数组可以存储char*类型的值,您并没有展示它是如何定义的。

票数 5
EN

Stack Overflow用户

发布于 2012-03-30 02:11:21

代码语言:javascript
复制
// 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';
票数 1
EN

Stack Overflow用户

发布于 2012-03-30 02:13:16

您正在尝试将unsigned char*赋值给非指针类型。你应该这样做:

代码语言:javascript
复制
const unsigned char * out = sqlite3_column_text(stmt, 0);
printf(out);

一个更大的问题是,您想如何处理这些数据和指针的生命周期。来自sqlite.org的注释:“返回的指针在发生如上所述的类型转换之前有效,或者在调用sqlite3_step()、sqlite3_reset()或sqlite3_finalize()之前有效。”因此,正如其他人所说,您可能希望分配内存并进行复制(strdupmallocstrcpy)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9930921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档