Json Parser用C |内存访问错误(内存转储)-错误

时间:2018-11-13 15:23:10

标签: c parsing memory

我尝试将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);

0 个答案:

没有答案