将下面代码中函数的地一个参数输入变为指向json字符串的char指针 函数最后输出也是指向json字符串的char指针
时间: 2023-12-20 19:03:51 浏览: 71
为了将函数的第一个参数输入变为指向json字符串的char指针,并且使函数最后输出也是指向json字符串的char指针,需要进行如下修改:
```c
char *sort_json(char *json_str, char *key, unsigned char *secret_key) {
cJSON *json = cJSON_Parse(json_str);
cJSON *child;
int i;
int size = cJSON_GetArraySize(json);
char *key_value[MAX_KEY_VALUE_LEN];
char *stringA;
char *signature;
// 按ASCII码从小到大排序
for (i = 0; i < size; i++) {
child = cJSON_GetArrayItem(json, i);
key_value[i] = cJSON_PrintUnformatted(child);
}
qsort(key_value, size, sizeof(char *), strcmp);
// 拼接成stringA
stringA = (char *)malloc(size * MAX_KEY_VALUE_LEN);
for (i = 0; i < size; i++) {
strcat(stringA, key_value[i]);
if (i != size - 1) {
strcat(stringA, "&&");
}
}
// 使用HmacSHA256算法签名
unsigned int len = strlen(stringA);
signature = (char *)malloc(len * 2 + 1);
memset(signature, 0, len * 2 + 1);
HMAC(EVP_sha256(), secret_key, strlen(secret_key), (unsigned char *)stringA, len, (unsigned char *)signature, &len);
// 将计算得到的签名作为一个新的参数,合并到json字符串中
cJSON_AddStringToObject(json, "sign", signature);
char *new_json_str = cJSON_Print(json);
// 释放内存
free(stringA);
free(signature);
cJSON_Delete(json);
return new_json_str;
}
```
修改后的函数中,第一个参数变为指向json字符串的char指针。首先需要将输入的json字符串解析成cJSON对象,然后进行相同的操作,最后将新的json对象转换成json字符串并输出,最终函数返回一个指向json字符串的char指针。
阅读全文