转义方括号]在sscanf中 [英] Escaping square bracket ] in sscanf

查看:30
本文介绍了转义方括号]在sscanf中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想扫描类似

的行
"[25, 28] => 34"

我写了一个小程序进行测试:

#include <cstdlib>
#include <iostream>

int main() {
        char* line = "[25, 28] => 34";
        char a1[100],  a2[100];
        int i;
        sscanf(line, "[%[^,], %[^]] => %i", a1, a2, &i);
        std::cout << "a1 = " << a1 <<"
a2 = " << a2 << "
i = "<<i <<"
";
        return 0;
}

编译此文件可提供

warning: unknown escape sequence ']'

和输出

a1 = 25
a2 = 28
i = -1073746244

如果我将其更改为

sscanf(line, "[%[^,], %[^]] => %i", a1, a2, &i);

我没有收到编译器投诉,但仍然

a1 = 25
a2 = 28
i = -1073746244

我知道问题出在第二个令牌中,因为

sscanf(line, "[%[^,], %[0123456789]] => %i", a1, a2, &i);

提供

a1 = 25
a2 = 28
i = 34

但是我想对第二个令牌使用终止条件。我该怎么做?

推荐答案

您想要

sscanf(line, "[%[^,], %[^]]] => %i", a1, a2, &i);

注意三个连续的]字符--第一个字符是%[集中不想匹配的字符,第二个字符以%[开始结束集合,第三个字符与输入中的]字符匹配

这篇关于转义方括号]在sscanf中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆