#include <stdio.h>
#include "cJSON.h"
char *message =
"{ \
\"name\":\"mculover666\", \
\"age\": 22, \
\"weight\": 55.5, \
}"; \\仔细上面的name
int main(void)
{
cJSON* cjson_test = NULL;
cJSON* cjson_name = NULL;
cJSON* cjson_age = NULL;
cJSON* cjson_weight = NULL;
/* 解析整段JSO数据 */
cjson_test = cJSON_Parse(message);
if(cjson_test == NULL)
{
printf("parse fail.\n");
return -1;
}
/* 依次根据名称提取JSON数据(键值对) */
cjson_name = cJSON_GetObjectItem(cjson_test, "nama");// 注意这里错误
cjson_age = cJSON_GetObjectItem(cjson_test, "age");
cjson_weight = cJSON_GetObjectItem(cjson_test, "weight");
printf("name: %s\n", cjson_name->valuestring);
printf("age:%d\n", cjson_age->valueint);
printf("weight:%.1f\n", cjson_weight->valuedouble);
return 0;
}
上面的程序出现了段错误,首先想到的是访问了不该访问的东西,仔细一看,其实message中的name 和 我们 cJSON_GetObjectItem 中的不一样,我们使用nama 这里会导致取不到真正的name,所以打印name的时候指针并不知道在哪里,访问了不该访问的地方,出现了Segmentation fault.
有如下建议:
- 勤用 if 判断,增加程序的健壮性
- 认真检查自己的变量名是否一直,避免低级错误
- 此外如何避免上述的低级错误,欢迎大家留言