要在 scanf() 的扫描集中包含连字符作为元素,它应该是列表中的第一个字符还是最后一个字符?

Tho*_*hom 5 c c++ scanf format-specifiers

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

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

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

Spi*_*rix 2

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

\n
\n

7.21.6.2 fscanf 函数

\n

[...]

\n
    \n
  1. 转换说明符及其含义是:
  2. \n
\n

\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0[...]

\n

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

\n
\n