我正在尝试将字符串拆分为标记但有些递归。我想解析:
"content=0&website=Google"
这样我就可以拿出参数和值了。如果我尝试strtok
我最终会破坏我要解析的字符串两次。所以我试过
char *contents = "content=0&website=Google"
char arg[100];
char value[100];
sscanf(contents, "%s&%s", arg, value);
作为第一遍,希望再次解析arg
,但它失败了,arg
包含整个字符串。我尝试使用"%s\&%s"
认为&
是一个保留字,但没有运气。
帮助!
编辑:
这是我的愚蠢行为:
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, "&");
}
但它不起作用,因为最后分裂的strtok
变成了gobbldygook。
答案 0 :(得分:9)
这是一个似乎有效的解决方案:
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);
答案 1 :(得分:1)
scanf
比您想象的更原始 - %s
将匹配下一个空格的所有内容。您最好的解决方案可能是坚持使用strtok
,但只提供您从权威原件中strdup
编辑的内容。
答案 2 :(得分:0)
我推荐类似以下的内容:
char t_str[100];
strncpy(t_str, contents, 100);
//now strtok() on t_str, original contents will be preserved