【问题标题】:What does "[^<]" in a sscanf evaluation expression mean?sscanf 评估表达式中的“[^<]”是什么意思?
【发布时间】:2010-11-24 14:52:21
【问题描述】:

谷歌搜索“sscanf 参考”或各种其他 sscanf 搜索词会带来大量关于 C sscanf 函数的可用参考。其中许多参考资料都包含对可在格式字符串中使用的可用标记的说明。

我正在查看另一个开发人员代码(不再与我们公司合作),我在一个格式字符串中看到他有多个类似于 %15[^&lt;] 的令牌。我知道令牌的%15 部分从参考字符串中取出15 个字符并将它们存储在字符串指针中。我找不到解释[^&lt;] 令牌功能的文档。

我浏览了多个参考页面,但找不到对此类标记的参考。也许我只是点击了错误的链接,但这意味着什么?此外,sscanf(和其他带有格式字符串的 cstdio 函数)是否比传统文档概述的更健壮?如果是这样,是否有人有更详尽文档的链接?

谢谢大家。

【问题讨论】:

    标签: c scanf


    【解决方案1】:

    您应该检查的参考是the ISO standard,尤其是7.19.6.2部分。

    对于您的特定情况,它匹配 15 个不是 &lt; 的字符。

    【讨论】:

      【解决方案2】:

      我找到的第一个参考 (here) 肯定包含它。在页面上搜索[

      括号用于表示匹配的字符组,就像在正则表达式中一样。如果第一个字符是 ^,则该组被反转。所以[^&lt;] 将匹配除小于号以外的任何字符。

      【讨论】:

      • 您应该注意,一些应用程序尝试使用像[^a-z] 这样的范围表达式,就像在正则表达式中一样,但是 C 标准(也不是 POSIX)没有定义这种用法的行为,应该避免.
      【解决方案3】:

      该标记匹配除“

      如果您使用的是 Windows 以外的平台,则可以在 scanf 的手册页中找到它。否则,我建议你安装 cygwin。 :)

      【讨论】:

      • @paxdiablo 我认为编写“Windows 以外的其他平台”比列出所有可能的具有手册页的操作系统更容易。 ;-)
      • @paxdiablo BeOS 肯定应该包含手册页,CP/M 应该带有打印文档,至于 z/OS 我不确定。
      • 仅供参考,这是针对嵌入式系统的。
      • @RLH 没关系,标准库都是一样的(希望如此)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      相关资源
      最近更新 更多