json-c解析-取消引用指向不完整类型的指针时出错

json-c解析-取消引用指向不完整类型的指针时出错,c,json,pointers,json-c,C,Json,Pointers,Json C,我一直在尝试使用以下代码,取自一个示例,我必须将json_object_object_get(struct json_object*obj,const char*key)更改为json_object_get_ex(struct json_object*obj,const char*key,struct json_object**value) 很抱歉,我已经发布了类似的问题,因为几天来我一直试图找到一种从套接字解析json的方法,我感到非常绝望,但我已经做了更多的工作和研究,我认为这已经很接近了。

我一直在尝试使用以下代码,取自一个示例,我必须将json_object_object_get(struct json_object*obj,const char*key)更改为json_object_get_ex(struct json_object*obj,const char*key,struct json_object**value)

很抱歉,我已经发布了类似的问题,因为几天来我一直试图找到一种从套接字解析json的方法,我感到非常绝望,但我已经做了更多的工作和研究,我认为这已经很接近了。我在编译以下文件时遇到的错误是:

server4.c:在函数“main”中: server4.c:62:错误:取消对不完整类型的指针的引用 server4.c:68:警告:赋值从整数生成指针,但不进行强制转换

    struct json_object *jobj, *val_jobj, *value;                                        
    char const *val;                                                              
    char buf[50];                                                                              
    fgets(buf, sizeof(buf), stdin);                                               
    printf("Input JSON : %s", buf);         
    char const *val;
    *jobj = json_tokener_parse(buf);
    if (is_error(jobj))    
    return (-1);  
    printf("Received JSON in String format : %s\n",    
    json_object_to_json_string(jobj));

  //Get the value for the key "name"      
    val_jobj = json_object_object_get_ex(jobj, "name", &value);    
    printf("Extracted value for command : %s\n",    

    //Get the string from the value of the key "name"                                         
    val = json_object_get_string(val_jobj);                                       
    printf("String value returned : %s\n", val);      
<>我不知道什么是错的,我不完全理解JSON-C是如何工作的,我也更熟悉C++,当然我也使用指针。无论哪种方式,通过C++的JSON解析器阅读,我发现它们更容易理解。
提前感谢

代码中显示的唯一取消引用是

*jobj = json_tokener_parse(buf);
因此,这一定是错误消息引用的第62行

您告诉编译器获取指针
jobj
(您从未为其赋值,因此错误号为1)的值,并在该值指向的空间中存储从
json\u tokener\u parse(buf)
返回的值。问题是,您没有告诉编译器什么是
struct json_对象
,因此
jobj
是指向不完整类型的指针-编译器不知道它有多大,也不知道它由什么组件组成。我假设有一个JSON头文件您忽略了
#包括


关于第68行的警告是一个单独但可能相关的问题,但是第68行(如果我对62的猜测是正确的)是一个注释。

json_对象结构是一个不透明类型。它是私有的,指向它的指针不能被json-c库之外的代码取消引用

json_tokener_parse返回json_对象*,因此第62行应该是:

jobj = json_tokener_parse(buf);

也就是说,不要取消对jobj的引用。

你能把它分解成更容易阅读的内容吗?如中所示,显示相同问题的较小测试函数。编译错误在第62行。因此,您需要在代码片段中输入行号,或者指出哪一行是第62行
我有了
#include
,我正在用-l json编译。它是defo链接,因为它给了我关于上一个get_对象函数正在运行的错误消息deprecated@AlanAu我现在不能再检查了,因为我们的迷你处理器服务器程序明天将安装在某个地方,所以它是离线的。但我很确定我把它改为了尊重,因为在我得到一个关于将int转换为指针的错误之前,我认为这一定是因为我没有在
*jobj=json\u tokener\u parse(buf)
中取消引用变量。我不知道你的另一个错误是什么。如果你再收到那封信。但你绝对不能取消对jobj的引用。即使没有得到编译错误,也会得到运行时错误。jobj在这一点上是未初始化的,因此无论与json-c有什么关系,都无法取消对它的引用。