gpt4 book ai didi

C指针不在同一个地址

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:13 26 4
gpt4 key购买 nike

我遇到了一个问题,指针的地址与我预期的不同(我知道我的语法错误,我只是看不到它,是的,我是 C 的新手)。

我正在使用名为 jansson 的 json 库,我编写了一个简单的静态包装器来将传入的字符串转换为 json,但也进行了一些错误检查。

json_t *jsonRoot;
char jsonString[1024];

static bool jsonLoad(char *string, json_t *root){
json_error_t jsonError;
root = json_loads(string, 0, &jsonError);
// Then some error checking is done, and no errors are found
if(!root)
{
return false;
}
if(!json_is_object(root)
{
return false;
}
return true;
}

void main(){
printf("Incoming string is %s\n", jsonString);
if(!jsonLoad(jsonString, jsonRoot)
{
return 0;
}

json_t *id;
id = json_object_get(jsonRoot, "id");
if(!json_is_string(id))
{
// Getting into here
printf("Jansson Error: not a string\n");
}
}

我确实看到,使用断点,我的 json 对象加载得很好,但是当我回到 main 的上下文然后使用 jsonRoot 时,它指向一个完全不同的地址。

最佳答案

您的错误是您将指向 jsonRoot 的指针放入局部变量 root 中。如果传入jsonRoot的地址,把结果放到indirection中,就可以看到了。查看 jsonLoad 的定义和对它的调用的变化。

json_t *jsonRoot;
char jsonString[1024];

static bool jsonLoad(char *string, json_t **root){
json_error_t jsonError;
*root = json_loads(string, 0, &jsonError);
// Then some error checking is done, and no errors are found
if(!(*root))
{
return false;
}
if(!json_is_object(*root))
{
return false;
}
return true;
}

void main(){
printf("Incoming string is %s\n", jsonString);
if(!jsonLoad(jsonString, &jsonRoot)
{
return 0;
}

json_t *id;
id = json_object_get(jsonRoot, "id");
if(!json_is_string(id))
{
// Getting into here
printf("Jansson Error: not a string\n");
}
}

关于C指针不在同一个地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35659770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com