我试图用sscanf解析以下字符串:
query=testword&diskimg=simple.img
Run Code Online (Sandbox Code Playgroud)
如何使用sscanf解析出"testword"和"simple.img"?sscanf的分隔符参数让我很困惑:/
谢谢!
dst*_*st2 15
如果你知道"testword"的长度总是8个字符,你可以这样做:
char str[] = "query=testword&diskimg=simple.img";
char buf1[100];
char buf2[100];
sscanf(str, "query=%8s&diskimg=%s", buf1, buf2);
Run Code Online (Sandbox Code Playgroud)
buf1现在将包含"testword",buf2将包含"simple.img".
或者,如果您知道testword将始终以=开头,后跟&,并且simple.img将始终以=开头,您可以使用:
sscanf(str, "%*[^=]%*c%[^&]%*[^=]%*c%s", buf1, buf2);
Run Code Online (Sandbox Code Playgroud)
它非常神秘,所以这里是摘要:每个%指定一大块文本的开头.如果在%之后有*,则表示我们忽略该块并且不将其存储在我们的缓冲区中.括号内的^表示此块包含任何数量的字符,这些字符不是括号内的字符(除了^本身).%s读取任意长度的字符串,%c读取单个字符.
总结一下: