Я пытаюсь использовать библиотеку libjson for C и пытаюсь запустить это (https://linuxprograms.wordpress.com/2010/05/22/compiling-a-json-c-program-in-linux/) Программа с моим собственным JsonObject. Мой JsonObject - это Jsonstring из файла json.
Мой вывод из скомпилированного кода: Ошибка доступа к памяти (память выгружена)
Как я могу это исправить?
Мой код:
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);