使用sscanf匹配零个或多个空格

Jan*_*roň 1 c string parsing scanf

我们有这个代码

char input[] = "key: value";
char key[32], value[32];
sscanf(input, "%31[^:]:%*[ ]%31s", key, value);
Run Code Online (Sandbox Code Playgroud)

之后可以有零个或多个空格:,我想将key ond值存储到c-string变量中.上面的代码可以使用一个或多个空格,但零空格的运气很难.

有一种简单的方法来解析这样的字符串吗?不一定是sscanf,但我想避免使用正则表达式.

编辑

我找到了一个支持已接受答案的参考文献(这是一个有用但非直观的功能):

该函数将读取并忽略在下一个非空白字符之前遇到的任何空白字符(空白字符包括空格,换行符和制表符 - 请参阅isspace).格式字符串中的单个空格验证从流中提取的任何数量的空白字符(包括无).

Jon*_*ler 5

只是用"%31[^:]:%31s".

所述%s转换规格跳过反正前导空白,并在后一个或多个非毛坯第一坯料停止.

如果您决定在第二个字段中需要空白,而不是前导空白,则使用:

"%31[^:]: %31[^\001]"
Run Code Online (Sandbox Code Playgroud)

(假设你的字符串不太可能包含你感兴趣的控件-A字符).格式字符串中的空白跳过零个或多个空格(严格地说,零个或多个空格字符).