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

时间:2014-12-22 23:28:37

标签: c string parsing scanf

让我们拥有此代码

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

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

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

修改

我发现reference支持接受的答案(这是一个有用但非直观的功能):

  

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

1 个答案:

答案 0 :(得分:5)

只需使用"%31[^:]:%31s"

%s转换规范无论如何都会跳过前导空白,并在一个或多个非空白后停在第一个空白处。

如果你决定在第二个领域需要空白,而不是领先的空白,那么使用:

"%31[^:]: %31[^\001]"

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