将连字符作为元素包含在scanf()的扫描集中,如果它是列表中的第一个字符或最后一个字符



scanf(), %[-A-B234abc]%[A-B234abc-]的正确扫描集格式说明符语法是什么?我在StackOverflow上找不到答案,下面两个链接给出了相互矛盾的答案:

cplusplusreference:不是第一个字符的破折号(-)可能在某些库实现中产生不可移植的行为。

beez:要匹配连字符,请将其设置为集合中的最后一个字符:%[a - c -]。

根据n1570 (C11标准草案)和n1256 (C99标准草案),

7.21.6.2 fscanf函数

[…]

  • 转换说明符及其含义为:
  •         [...]

    […]]
    如果-字符在扫描列表中,并且不是第一个字符,也不是第二个字符(其中第一个字符是^),也不是最后一个字符,则该行为是实现定义的。

    相关内容