2017-06-09 56 views
0

我正在尝试读取由整数和带引号的字符串组成的行sscanf。 我的格式化字符串就像"\"%m[^\"]s\" , %x"sscanf在引号内给出一个字符串,但不给第二个字段的其余输入。我也试过"\"%m[^\"]s%c",所以关闭报价应该进入%csscanf再次只给出一个字段。只有%s它的工作原理,%[]s它没有。方括号在sscanf中如何工作?

+1

's'不是'%['格式说明符的一部分。算了吧。 –

+1

您是否阅读过文档? –

回答

2

假定输入字符串是"\"Hello there\", 32",那么这是sscanf()如何与格式化字符串"\"%m[^\"]s\" , %x"读取它:

  • \"在格式化串与输入匹配\"(和它被丢弃)。
  • %m[^\"] 匹配Hello there
  • s在格式化字符串不匹配\"所以扫描结束。

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

更多关于sscanf()和它的格式化字符串,读http://en.cppreference.com/w/c/io/fscanf和/或the man page

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

+0

请注意'%m [^ \“]'中的'm'使用标准C库的非标准扩展。 – chux

+0

@chux是的,我知道,'m'修饰符是一个POSIX扩展。 OP会在他使用POSIX的时候使用它,因此这不会是他的问题的原因,但是对于未来的读者,我会在我的答案中加上一个注释。 – SiggiSv