让我们看看这个密码

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

:之后可以有零个或多个空格,我想将key ond值存储到c-string变量中。上面的代码可以使用一个或多个空格,但如果使用零个空格,就很难了。
有没有一种简单的方法来解析这些字符串不一定是sscanf,但我想避免regex。
编辑
我发现了一个支持公认答案的reference(这是一个多么有用但又不直观的特性):
函数将读取并忽略任何空白字符
在下一个非空白字符(空白)之前遇到
字符包括空格、换行符和制表符——请参阅isspace)。
格式字符串中的单个空白将验证
从流中提取的空白字符(包括无)。

最佳答案

只需使用"%31[^:]:%31s"
转换规范无论如何都会跳过前导空白,并在一个或多个非空白之后的第一个空白处停止。
如果您决定在第二个字段中需要空格,而不是前导空格,请使用:

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

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

10-08 00:02