使用sscanf将C字符串拆分为标记

我试图将一个字符串拆分成令牌,但有点递归。 我想解析:

"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"思考并且是一个保留字,但没有运气。

救命!

编辑:

这是我的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, "&"); } 

但它不起作用,因为最后分裂的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); 

scanf比您想象的更原始 – %s将匹配到下一个空格的所有内容。 你最好的解决办法可能就是坚持使用strtok但只抛出你从权威原文中strdup内容。

我建议类似以下内容:

 char t_str[100]; strncpy(t_str, contents, 100); //now strtok() on t_str, original contents will be preserved