我试图用sscanf解析以下字符串:
query=testword&diskimg=simple.img
如何使用sscanf解析出“testword”和“simple.img”? sscanf的分隔符参数让我很困惑:/
谢谢!
答案 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读取单个字符。
总结一下: