让我们拥有此代码
char input[] = "key: value";
char key[32], value[32];
sscanf(input, "%31[^:]:%*[ ]%31s", key, value);
在:
之后可以有零个或多个空格,我想将密钥值存储到c-string变量中。上面的代码可以使用一个或多个空格,但是零空格的运气很难。
有一种简单的方法来解析这些字符串吗?不一定是sscanf,但我想避免使用正则表达式。
修改
我发现reference支持接受的答案(这是一个有用但非直观的功能):
该函数将读取并忽略任何空格字符 在下一个非空格字符(空白字符)之前遇到过 字符包括空格,换行符和制表符 - 请参阅isspace)。 格式字符串中的单个空格验证任何数量的 从流中提取的空格字符(包括无)。
答案 0 :(得分:5)
只需使用"%31[^:]:%31s"
。
%s
转换规范无论如何都会跳过前导空白,并在一个或多个非空白后停在第一个空白处。
如果你决定在第二个领域需要空白,而不是领先的空白,那么使用:
"%31[^:]: %31[^\001]"
(假设您的字符串不太可能包含您感兴趣的控件-A字符)。格式字符串中的空白会跳过零个或多个空格(严格地说,零个或多个空格字符)。