我试图将一个字符串拆分成令牌,但有点递归.我想解析:
"content=0&website=Google"
Run Code Online (Sandbox Code Playgroud)
这样我就可以拿出参数和值了.如果我尝试strtok我最终破坏我要解析两次的字符串.所以我试过了
char *contents = "content=0&website=Google"
char arg[100];
char value[100];
sscanf(contents, "%s&%s", arg, value);
Run Code Online (Sandbox Code Playgroud)
作为第一遍,希望arg再次解析,但它失败了,并arg包含整个字符串.我试过用"%s\&%s"思考&是一个保守的词,但那里没有运气.
救命!
编辑:
这是我的strtok hack:
static void readParams(char * string, char * param, char * value) {
printf("This is the string %s\n",string);
char * splitted = strtok (string,"=");
while (splitted != NULL)
{
printf("This is the string %s\n",splitted);
splitted = strtok (NULL, "=");
// Then do some saving to param and value
}
}
char * splitted = strtok (contents,"&");
int counter = 0;
while (splitted != NULL)
{
char * t_str = strdup(splitted);
readParams(t_str, param, value);
splitted = strtok (NULL, "&");
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为最后分裂strtok成为gobbldygook.
这是一个似乎有效的解决方案:
char *contents = "content=0&website=Google";
char arg[100] = {0};
char value[100] = {0};
sscanf(contents, "%[^&]&%s", arg, value);
printf("%s\n%s\n", arg, value);
Run Code Online (Sandbox Code Playgroud)
scanf比您想象的更原始 \xe2\x80\x94%s将匹配所有内容到下一个空格。您最好的解决方案可能是坚持使用,strtok但仅扔掉您strdup从权威原文中编辑的内容。