我正在尝试使用
scanf()
读取文本缓冲区中 mov r0, r1, r2
或 ldr r0, [r1, 0x4]
形式的行,否定任何可能的方括号、逗号和空格。以下代码不起作用:
void ReadBuffer(const char* buffer)
{
char command[2048];
char var[3][2048];
sscanf(buffer,"%[^ ,[]\n\t] %[^ ,[]\n\t], %[^ ,[]\n\t], %[^ ,[]\n\t]", command, va[0], var[1], var[2]);
}
如何将方括号添加到否定扫描集中?
C 2018 在 7.21.6.2 12 中描述了
scanf
转换说明符,对于 [
它说:
... 如果转换说明符以
或[]
开头,则右括号字符位于扫描列表中,并且下一个右括号字符是结束规范的匹配右括号;否则第一个右括号字符是结束规范的字符。[^]
因此,请将
]
立即放入 ^
。 [
可以位于扫描列表中的任何位置([
和结尾 ]
之间的字符)。
示例:
#include <stdio.h>
int main(void)
{
char a[100], b, c[100];
sscanf("foo]bar", "%[^]]%c%[^]]", a, &b, c);
printf("a = %s.\n", a);
printf("b = %c.\n", b);
printf("c = %s.\n", c);
}
输出:
a = foo. b = ]。 c = 酒吧。