方括号在sscanf中如何工作?
我试图用方括号在sscanf中如何工作?,c,scanf,C,Scanf,我试图用sscanf读取由整数和带引号的字符串组成的行。 我的格式化字符串类似于“\%m[^\”]s\”,%x“sscanf在引号内给出一个字符串,但不在第二个字段中给出其余的输入。我还尝试了“\%m[^\”]s%c“,因此结束报价应进入%csscanf再次只给出一个字段。只使用%s它就可以工作,而使用%[]s它就不能工作。假设输入字符串是“\'Hello here\”,32“,那么这就是sscanf()使用格式化字符串”\%m[^\]s\,%x“读取它的方式: 格式化字符串中的\“与输入中的
sscanf
读取由整数和带引号的字符串组成的行。
我的格式化字符串类似于
“\%m[^\”]s\”,%x“
sscanf
在引号内给出一个字符串,但不在第二个字段中给出其余的输入。我还尝试了“\%m[^\”]s%c“
,因此结束报价应进入%c
sscanf
再次只给出一个字段。只使用%s
它就可以工作,而使用%[]s
它就不能工作。假设输入字符串是“\'Hello here\”,32“
,那么这就是sscanf()
使用格式化字符串”\%m[^\]s\,%x“
读取它的方式:
- 格式化字符串中的
与输入中的\“
匹配(并且它被丢弃)\”
1与%m[^\“]
匹配你好
- 格式化字符串中的
与s
不匹配,因此扫描结束\“
sscanf()
及其格式化字符串的详细信息,请阅读和/或
1请注意,
m
修饰符不是标准C(即使它是`POSIX标准的一部分)。s不是%[
格式说明符的一部分。放下它。您读过文档了吗?请注意,%m[^\]中的m
正在使用标准C库的非标准扩展。@chux是的,我知道,m
修饰符是一个POSIX扩展。我只是假设OP正在使用POSIX设置,因此这不会是他的问题的原因。但是对于未来的读者,我会在我的回答中添加一个注释。