(json-c学习8)关于Segmentation fault的一个问题

开始的时候,我以为是json_tokener_parse导致的Segmentation fault的问题,后来问作者,发现是 json_object_object_foreach的问题。

因为如果是封装成一个函数给别人用,别人可能会传递一个非json的字符串过来,那程序就会崩了,为了防止程序崩,要在生成json格式的字符串和遍历json格式的字符串之间加一个判断,是否是object或者array等。

我在github上问作者的链接:https://github.com/json-c/json-c/issues/623

解决办法,添加了425-430共6行。

407 void TestSegFunction(void)
408 {
409     int i = 0;
410     char *str = "\"{\"loop_number\":1}\"";
411     int len = strlen(str);
412     struct json_tokener *tok = NULL;
413 //    char *str = "{\"loop_number\":1}";
414     json_object *pstObj = NULL;
415     json_object *sonPstObj = NULL;
416     pstObj = json_tokener_parse(str);
417   //  pstObj = json_tokener_parse_ex(tok, str, len);
418
419     if (NULL == pstObj)
420     {
421         printf("%s : json_tokener_parse failed.\n", __FUNCTION__);
422     }
423     else
424     {
425         if (json_object_get_type(pstObj) != json_type_object)
426         {
427             json_object_put(pstObj);
428             printf("an error json string!\n");
429             return;
430         }
431         json_object_object_foreach(pstObj, key1, val1)
432         {
433             if (0 == strcmp(key1, LOOP_NUMBER))
434             {
435                 i = json_object_get_int(val1);
436                 printf("i = %d\n", i);
437             }
438         }
439     }
440 }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章