方括号内的 sscanf 分析值

sscanf parsing value inside square brackets

本文关键字:sscanf 方括号      更新时间:2023-10-16

我正在尝试解析方括号内的值:

米瓦尔[3]

std::string key("MYVAR[3]");
int idx;
int result = sscanf(key.c_str(), "%*s[%i]", &idx);
if (result > 0)
{
    std::cout << "It's array value" << std::endl;
}

我该怎么做?

%*s将读取字符[,因此您应该使用说明符"%*[^[][%i]"在字符之前停止。

"MYVAR[3""MYVAR[3]"都将提供相同的结果。

int result = sscanf(key.c_str(), some_format, &idx);
if (result > 0)

IOW,整数后的内容不相关/未检查,因为sscanf()不用于解析方括号内的内容。

代码应检查两个括号是否存在。


存在许多方法。 建议使用 "%n" 来检测扫描完成情况。

#define FMT_NOT_LBRACKET "%*[^[]"
#define FMT_BRACKETED_INT "[%i]"
int idx;
int n = 0;
sscanf(key.c_str(), FMT_NOT_LBRACKET FMT_BRACKETED_INT "%n", &idx, &n);
if (n) {
  Success();
}