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