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

时间:2015-10-25 07:11:11

标签: c++ c scanf format-specifiers

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  

7.21.6.2 fscanf功能

     

[...]

     
      
  1. 转换说明符及其含义为:
  2.         

    [...]

         

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