b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c 链表的定义和使用 cjson 源码阅读笔记

电脑杂谈  发布时间:2017-12-31 09:23:46  来源:网络整理

c 链表的定义和使用_c  如何使用单向链表_链表作用

cjson 的代码只有 1000+ 行, 而且只是简单的几个函数的调用。

而且 cjson 还有很多不完善的地方, 推荐大家看完之后自己实现一个 封装好的功能完善的 cjson 程序。

在阅读 json 之前, 建议阅读一下 json 的官方介绍。

如果上面的英文吓到你了的话, 可以看看这个中文翻译版本.

我的 这个 cjson 是从官网指定的地方下载的 ourceforge.

在看完官网的介绍后,我们知道 json 的 value 存在这么几种类型: 对象, 数组, 字符串, 数字, true, false, null。

其中对象是一个 key-value 的集合, 而数组是一些 value 的有序列表。

于是 cjson 中在 头文件中定义了 这些类型的数字编号和 cJSON value 的结构体。

/* cJSON Types: */
#define cJSON_False 0
#define cJSON_True 1
#define cJSON_NULL 2
#define cJSON_Number 3
#define cJSON_String 4
#define cJSON_Array 5
#define cJSON_Object 6
#define cJSON_IsReference 256

对于上面的 define , 如果是我的话,会选择 emnu 来实现这个类型的定义。

例如

enum {cJSON_False, cJSON_True, cJSON_NULL, cJSON_Number, cJSON_String, cJSON_Array, cJSON_Object, cJSON_IsReference=256};

然后是 json 一个 value 的结构,看注释也都可以明白干什么的。

/* The cJSON structure: */
typedef struct cJSON {
    struct cJSON *next,*prev;   /同一级的元素使用双向列表储存/
    struct cJSON *child;        /* 如果是个 object 或 array 的话,第一个儿子的指针 */
    int type;                   /* value 的类型 */
    char *valuestring;          /* 如果这个 value 是 字符串 的话,字符串值 */
    int valueint;               /* 如果是数字的话,整数值 */
    double valuedouble;         /* 如果是数字的话,浮点数值 */
    char *string;               /* 如果是对象的 key-value 元素的话, key 值 */
} cJSON;

在 c 语言中内存一般是 malloc 和 free 的。

为了方便用户自由的管理内存, cjson 使用 Hook 技术来让使用者可以自定义内存管理函数。

即用户自定义 malloc 和 free.

具体实现方式可以参考下面的代码, 默认使用系统的 malloc 和 free 函数, 用过 cJSON_InitHooks 函数可以替换成用户自定义的 malloc 和 free 函数。

typedef struct cJSON_Hooks {
    void *(*malloc_fn)(size_t sz);
    void (*free_fn)(void *ptr);
} cJSON_Hooks;
static void *(*cJSON_malloc)(size_t sz) = malloc;
static void (*cJSON_free)(void *ptr) = free;
void cJSON_InitHooks(cJSON_Hooks* hooks) {
    if (!hooks) { /* Reset hooks */
        cJSON_malloc = malloc;
        cJSON_free = free;
        return;
    }
    cJSON_malloc = (hooks->malloc_fn)?hooks->malloc_fn:malloc;
    cJSON_free = (hooks->free_fn)?hooks->free_fn:free;
}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-57098-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...