使用JSON-C解析的字符串的最大大小

时间:2012-01-26 01:10:22

标签: c json

我是JSON-C的新手,我需要知道可以使用json_tokener_parse解析字符串是否有任何大小限制。

所以基本上我需要知道我何时使用json_object * jobj = json_tokener_parse(string),是否可以传递字符串的大小限制。

提前致谢。

while (ret==0)
    {
      if((ret = dbcp->c_get(dbcp, &keyd, &datad, DB_NEXT))==0){

      if(vflag) {
    printf("broadcast_mode: after dbcp->c_get(dbcp, &keyd, &datad, DB_NEXT)\n");
      }

      my = (myrecord *) datad.data;

      if(vflag) {
    printf("broadcast_mode: after my = (myrecord *) datad.data\n");
      }

      if(vflag) {
        printf("db: %d: key retrieved: data was %s, %d\n", *(int *)keyd.data,my->src, datad.size);
      }
     }
    }
  if(vflag) {
    printf("broadcast_mode: dbp->c_get 2\n");
  }


  if ((ret = dbcp->c_get(dbcp, &keyd, &datad, DB_NEXT)) !=0)
    {
      if(vflag) {
    dbp->err(dbp, ret, "DBcursor->get");
      }
      //goto err;
    }

  if(vflag) {
    printf("broadcast_mode: dbp->c_close\n");
  }

  if ((ret = dbcp->c_close(dbcp)) != 0)
    {
      dbp->err(dbp, ret, "DBcursor->close");
      //return (1);
    }
 ret = dbp->close(dbp, 0);

  if(vflag) {
    printf("broadcast_mode: json_tokener_parse(my->src)\n");
    printf("broadcast_mode: address is %x,%d\n",(unsigned int)my->src,datad.size);
  }


  json_object * jobj = json_tokener_parse(my->src);   

                        here when datad.size is 1024 i get segmentation fault and it works when size is 500

1 个答案:

答案 0 :(得分:4)

json-c不使用任何固定大小的缓冲区,因此它仅受应用程序可以使用的内存量的限制。

这实际上是你可以从正确编写的库中得到的 - 使用固定缓冲区会要求它们很大,以避免长但不是非常长的JSON字符串的问题,然后很可能仍然会出现一些情况他们太小了。不要忘记所有其他浪费大量内存的情况。