我try 用以下代码解析提供给该方法的查询字符串
char array[] = "address=NYC&port=3359&username=JDoe&password=Secret*";
下面是我的代码(我也包含了这些帮助器方法的代码,因为并非所有的库都包含它们.)
typedef struct { char *key, *value; } keyValuePair_t, *keyValuePair_p;
char* strdup(const char* s) {
size_t len = strlen(s) + 1;
void* _new = malloc(len);
if (_new == NULL)
return NULL;
return (char*)memcpy(_new, s, len);
}
char* strsep(char** stringp, const char* delim) {
char* s;
const char* spanp;
int c, sc;
char* tok;
if ((s = *stringp) == NULL)
return (NULL);
for (tok = s;;) {
c = *s++;
spanp = delim;
do {
if ((sc = *spanp++) == c) {
if (c == 0)
s = NULL;
else
s[-1] = 0;
*stringp = s;
return (tok);
}
} while (sc != 0);
}
}
keyValuePair_p* queryStringProcessor(const char* array) {
char* query = strdup(array);
char* tokens = query;
char* p = query;
keyValuePair_p* ret = NULL;
unsigned char counter = 0;
while ((p = strsep(&tokens, "&\n"))) {
char* var = strtok(p, "="), *val = NULL;
if (var && (val = strtok(NULL, "="))) {
ret = (keyValuePair_p*)realloc(ret, (counter + 1)*sizeof(keyValuePair_p));
ret[counter] = (keyValuePair_p)calloc(1, sizeof(keyValuePair_t));
ret[counter]->key = var;
ret[counter]->value = val;
++counter;
}
}
free(query);
return ret;
}
问题是,queryStringProcessor运行得很好,它生成的键-值对也很好,但是当执行free(query)时,整个键-值对数组就变坏了,我不知道为什么.我在Windows下的VS2022上对其进行了测试. 谢谢你的帮忙!