2012-01-26 89 views
1

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

所以基本上我需要知道當我使用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 

回答

4

json-c沒有使用任何固定大小的緩衝區,所以它只受限於應用程序可以使用的內存量。

這實際上是你可以期望從一個正確書寫的庫 - 使用固定的緩衝區將需要他們是巨大的,以避免長 - 但不是非常長的JSON字符串的問題,然後最有可能仍然是一些他們太小的案例。不要忘記所有其他會浪費大量記憶的情況。

+0

嘿,我有這個問題 - > json_object * jobj = json_tokener_parse(my-> src);這是my-> src是存儲在.DB文件中的數據的指針。當src初始化爲字符大小爲1024(創建DB文件時)時,它會給我分段錯誤,當它的大小爲500時,它會正常工作。 – user537670

+0

如果你確實有問題發佈一些代碼來演示它... – ThiefMaster

+0

我修改了我的問題。它現在有代碼 – user537670