用于解析的Sscanf分隔符?

时间:2012-12-07 05:28:28

标签: c parsing scanf

我试图用sscanf解析以下字符串:

query=testword&diskimg=simple.img

如何使用sscanf解析出“testword”和“simple.img”? sscanf的分隔符参数让我很困惑:/

谢谢!

1 个答案:

答案 0 :(得分:14)

如果你知道“testword”的长度总是8个字符,你可以这样做:

char str[] = "query=testword&diskimg=simple.img";
char buf1[100];
char buf2[100];

sscanf(str, "query=%8s&diskimg=%s", buf1, buf2);

buf1现在将包含“testword”,buf2将包含“simple.img”。

或者,如果你知道testword总是以=开头,后跟&,并且simple.img将始终以=开头,你可以使用:

sscanf(str, "%*[^=]%*c%[^&]%*[^=]%*c%s", buf1, buf2);

这很神秘,所以这里是摘要:每个%指定一大块文本的开头。如果在%之后有*,则表示我们忽略该块并且不将其存储在我们的缓冲区中。括号内的^表示此块包含任意数量的字符,这些字符不是括号内的字符(除了^本身)。 %s读取任意长度的字符串,%c读取单个字符。

总结一下:

  • 如果不是=,我们会继续阅读和忽略字符。
  • 我们阅读并忽略另一个角色(等号)。
  • 现在我们正在使用testword,所以我们继续阅读并将字符存储到buf1中,直到我们遇到&字符。
  • 阅读和忽略更多字符;我们继续前进,直到我们再次击中=。
  • 我们阅读并忽略单个字符(同样,等号)。
  • 最后,我们将剩下的内容(“simple.img”)存储到buf2中。