Json Parser в C |Ошибка доступа к памяти (память выгружена) - Ошибка - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь использовать библиотеку 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);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...