【发布时间】:2012-03-23 15:08:44
【问题描述】:
我正在尝试将字符串拆分为标记,但有点递归。我正在尝试解析:
"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, "&");
}
但它不起作用,因为最后 splitted 的 strtok 变成了 gobbldygook。
【问题讨论】:
-
所以在调用
strtok()之前保存字符串的副本。 -
@S.O users 我认为这是一个非常好的问题。除了预测其他方法之外,如果有人解释为什么 sscanf(contents, "%s&%s", arg, value); 会更好。不工作
-
@EAGER_STUDENT 就像我在回答中所说的那样,要求
scanf扫描%s会导致它扫描到下一个空格。所以它不会停在&符号上。