C语言 赋值从指针目标类型中丢弃“const”限定符 - 尝试检索值时



Couchbase使用基于事件的模型。因此,为了检索值,我必须设置一个回调处理程序,然后在数据库中抛出一个 get 请求。它是这样完成的:

[... some stuff happens]
/* set up a callback for our get requests  */
lcb_set_get_callback(instance, get_callback);

get_callback,我有一个cookie可以把我的价值观融入其中。所以我解析我返回的对象并通过以下方式将其放入 cookie 中:

json_t *object;
[... some error handling and parsing]
/*Put the json_object into the cookie*/
lcb_set_cookie(instance, object);

当我想检索它时,我必须使用lcb_get_cookie返回 void 指针但说:"lcb_get_cookie() 返回由 lcb_set_cookie() 设置的值,或者 NULL 如果lcb_set_cookie() 未设置任何值。所以我想做这样的事情:

/* Retrieve the ad out of the cookie*/
ad_json = lcb_get_cookie(instance);

当我尝试像这样使用它时,我收到警告: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default] .所以我很困惑。如何检索我放入 Cookie 的值?

编辑:我忘了提到我需要进一步处理数据并想要对其进行更改。

告诉编译器你承诺不更改该cookie:

json_t const * object = lcb_get_cookie(instance);

但是如果你需要改变它,你也许可以投射它,因为手册说"......libcouchbase 不会做任何有价值的东西。

json_t * object = (json_t *)lcb_get_cookie(instance);

但也许更安全的替代方案是将内容复制到新的 cookie 中,进行更改并再次设置?

我不知道json_t的确切布局,如果它不包含任何内部指针,简单的赋值可能会解决问题:

 json_t const * old = lcb_get_cookie(instance);
 json_t * new = /* init pointer with your new object */;
 *new = *old; /* Copy data */

最新更新