使用polar中的json_fprintf,h打印Integer和Char数组

kd3sttzy  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(111)

我正在使用冻结的解析器创建JSON文件。除了我尝试解析数组的时候,一切都很好。
这是我的代码:

int installation_info_graphs(int roll_array[], int roll_len, int pitch_array[], int pitch_len, int tn_array[], int tn_len, int snr_array[], int snr_len)
{

    char *roll_index = create_index_string_list(roll_array, roll_len);
    char *pitch_index = create_index_string_list(pitch_array, pitch_len);
    char *tn_index = create_index_string_list(tn_array, tn_len);
    char *snr_index = create_index_string_list(snr_array, snr_len);
    return json_fprintf("/api/installation/inst_info_graphs.json", "{roll: %M,roll_labels: %M,"
                        "pitch: %M, pitch_labels: %M, true_north: %M, true_north_labels: %M,"
                        "snr: %M, snr_labels: %M}", roll_array, roll_len, roll_index, pitch_array, pitch_len, pitch_index, tn_array,
                        tn_len, tn_index, snr_array, snr_len, snr_index);
}
//where the function to create an index string array is
char *create_index_string_list(char *lst, int len) {
    char *index_string_list = (char *) malloc(len * sizeof(char *));
    char index_str[3];
    for (int i = 0; i < len; i++) {
        sprintf(index_str, "%02d", i);
        char *str = (char *) malloc((strlen(index_str) + 3) * sizeof(char));
        strcpy(str, "1:0");
        strcat(str, index_str);
        index_string_list[i] = str;
    }
    return index_string_list;
}

我在尝试执行代码后得到的是一个分段错误。我想我使用了一个不正确的类型格式化程序,这个库有一个合适的,但我在文档中找不到它。有人可以帮我解决这个问题。谢谢!

hwamh0ep

hwamh0ep1#

你的编译器可能会给你一个这样的警告,你忽略了:

warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast

这是因为当您真正需要一个字符指针数组时,您正在定义char *index_string_list(一个字符数组)。你的函数应该返回一个字符串数组。
因此,您需要更改函数的返回类型,并将index_string_list的类型更改为char **
固定代码:

char **create_index_string_list(char *lst, int len) {
    char **index_string_list = malloc(len * sizeof(char *));
    char index_str[3];
    for (int i = 0; i < len; i++) {
        sprintf(index_str, "%02d", i);
        char *str = malloc((strlen(index_str) + 3) * sizeof(char));
        strcpy(str, "1:0");
        strcat(str, index_str);
        index_string_list[i] = str;
    }
    return index_string_list;
}

我还删除了malloc()返回值上不必要的强制转换,因为这是considered bad practice
您还需要更改存储此函数返回值的所有变量(例如:例如char *roll_index)为char **。我不知道json_fprintf()是否可以打印字符串数组。
我还担心实际上没有使用create_index_string_list()lst参数-这可能表明存在某种bug。

相关问题