【问题标题】:How do square brackets work in sscanf?方括号如何在 sscanf 中工作?
【发布时间】:2017-06-09 11:46:11
【问题描述】:

我正在尝试使用sscanf 读取由整数和带引号的字符串组成的行。 我的格式化字符串类似于"\"%m[^\"]s\" , %x"sscanf 在引号内给出一个字符串,但不在第二个字段中给出其余的输入。我也试过"\"%m[^\"]s%c",所以结束语应该进入%csscanf 再次只给出一个字段。仅使用 %s 即可,使用 %[]s 则无法使用。

【问题讨论】:

  • s 不是%[ 格式说明符的一部分。放下它。
  • 您阅读文档了吗?

标签: c scanf


【解决方案1】:

假设输入字符串是"\"Hello there\", 32",那么这就是sscanf() 使用格式化字符串"\"%m[^\"]s\" , %x" 读取它的方式:

  • 格式化字符串中的\" 与输入中的\" 匹配(并被丢弃)。
  • %m[^\"]1Hello there 匹配。
  • 格式化字符串中的s不匹配\",因此扫描结束。

您要使用的格式化字符串是"\"%m[^\"]\" , %x"

有关sscanf() 及其格式字符串的更多信息,请阅读http://en.cppreference.com/w/c/io/fscanf 和/或the man page

1 请注意,m 修饰符不是标准 C(即使它是 `POSIX 标准的一部分)。

【讨论】:

  • 请注意,%m[^\"] 中的 m 正在使用标准 C 库的非标准扩展。
  • @chux 是的,我知道,m 修饰符是 POSIX 扩展。我只是假设 OP 正在使用 POSIX 设置,因为他正在使用它,因此这不会是他的问题的原因。但对于未来的读者,我会在我的答案中添加注释。
猜你喜欢
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
相关资源
最近更新 更多