cjson cJSON_GetObjectItem卡死

p =cJSON_GetObjectItem(ptJson, "card")->valueString;


cJSON *cJSON_GetObjectItem(cJSON *object,const char *string)
{
    cJSON *c=object->child;
    //BAS_LOG(BAS_LOGDEBUG, 0, 0, "begin");
    while (c && cJSON_strcasecmp(c->string,string))
    {
        //BAS_LOG(BAS_LOGDEBUG, 0, 0, "test[%s]",c->string);
        c=c->next;   
    }
    //BAS_LOG(BAS_LOGDEBUG, 0, 0, "end");
    return c;
}

BAS_EXPORT static int cJSON_strcasecmp(const char *s1,const char *s2)
{
    if (!s1) 
        return (s1==s2)?0:1;
    if (!s2) 
        return 1;

    for(; tolower(*s1) == tolower(*s2); ++s1, ++s2) 
    {
        if(*s1 == 0)    
            return 0;
    }
    return tolower(*(const unsigned char *)s1) - tolower(*(const unsigned char *)s2);
}

在Linux环境时候,读取json文件中不存在的字段时,cJSON_GetObjectItem卡死,产生core。

没有这个字段,则cJSON_GetObjectItem返回NULL。空指针指向子域,报错。

你可能感兴趣的:(cjson cJSON_GetObjectItem卡死)