“减号”未被捕获

时间:2009-09-23 01:28:20

标签: c

运行:

#include <stdio.h>

int main(int argc, char *argv[]) {
    const char *exp = "10-2+3*5";
    char tok[255];
    sscanf(exp, "%[^+-*/^]", tok);
    printf("%s\n", tok);
    sscanf(exp, "%[^-+*/^]", tok);
    printf("%s\n", tok);
    return 0;
}

输出:

10-2
10

但为什么?

1 个答案:

答案 0 :(得分:2)

将连字符放在[...]集的末尾。这与正则表达式类似。

sscanf的%[...]格式接受范围。范围可以像这样使用:%[a-z]

为区分匹配的纯连字符,必须将其放在末尾,因此不会将其解释为范围。

您可以在sscanf manual page上找到更多文档。向下滚动到描述[模式的部分。