我正在使用冻结的解析器创建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;
}
我在尝试执行代码后得到的是一个分段错误。我想我使用了一个不正确的类型格式化程序,这个库有一个合适的,但我在文档中找不到它。有人可以帮我解决这个问题。谢谢!
1条答案
按热度按时间hwamh0ep1#
你的编译器可能会给你一个这样的警告,你忽略了:
这是因为当您真正需要一个字符指针数组时,您正在定义
char *index_string_list
(一个字符数组)。你的函数应该返回一个字符串数组。因此,您需要更改函数的返回类型,并将
index_string_list
的类型更改为char **
。固定代码:
我还删除了
malloc()
返回值上不必要的强制转换,因为这是considered bad practice。您还需要更改存储此函数返回值的所有变量(例如:例如
char *roll_index
)为char **
。我不知道json_fprintf()
是否可以打印字符串数组。我还担心实际上没有使用
create_index_string_list()
的lst
参数-这可能表明存在某种bug。