C scanf() 扫描集中的括号取反

问题描述 投票:0回答:1

我正在尝试使用

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 scanf
1个回答
0
投票

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 = 酒吧。
© www.soinside.com 2019 - 2024. All rights reserved.