我尝试将libjson库用于C,并尝试使用自己的JsonObject启动此(https://linuxprograms.wordpress.com/2010/05/22/compiling-a-json-c-program-in-linux/)编程。我的JsonObject是来自json文件的Jsonstring。
我从编译代码中得到的输出是:内存访问错误(内存已转储)
我该如何解决?
我的代码:
int main() {
char *path = "./Paketspezifikationen/Default-File/DefaultConfig.json";
FILE *fp;
char *data = NULL;
if((fp=fopen(path, "rb")) == NULL) {
} else if(fseek(fp,0, SEEK_END) != 0) {
fclose(fp);
} else {
long size = ftell(fp);
if(size > 0 && (data = (char *) malloc(size + 1)) != NULL) {
fseek(fp, 0, SEEK_SET);
if(fread(data, 1, size, fp) != (size_t) size) {
free(data);
data = NULL;
} else {
data[size] = '\0';
}
}
fclose(fp);
}
printf ("%s",data); // return data
json_object * jobj = json_tokener_parse(data);
enum json_type type = json_object_get_type(jobj);
printf("type: %d\n",type);
switch(type) {
case json_type_null:
printf("json_type_nulln");
break;
case json_type_boolean:
printf("json_type_booleann");
break;
case json_type_double:
printf("json_type_doublen");
break;
case json_type_int:
printf("json_type_intn");
break;
case json_type_object:
printf("json_type_objectn");
break;
case json_type_array:
printf("json_type_arrayn");
break;
case json_type_string:
printf("json_type_stringn");
break;
}
}
如果我像本教程一样使用printf("type: ", type)
,则会得到:JsonParser.c:83:9: warning: too many arguments for format [-Wformat-extra-args] printf("type: ",type);