使用sscanf()

时间:2018-08-19 18:44:48

标签: c++

["STRING", FLOAT, FLOAT, FLOAT],

我需要从该字符串中解析三个值-一个STRING和三个FLOATS。

sscanf()返回零,可能是格式说明符错误。

sscanf(current_line.c_str(), "[\"%s[^\"]\",%f,%f,%f],", 
            &temp_node.id, 
            &temp_node.pos.x, 
            &temp_node.pos.y, 
            &temp_node.pos.z)) 

你知道怎么了吗?

2 个答案:

答案 0 :(得分:1)

请阅读sscanf(3)上的手册页。 %s格式与使用正则表达式不匹配,它仅扫描非空格字符。即使按您的假设工作,您的正则表达式也将无法正确处理所有JSON字符串(如果您的输入数据格式受到足够的限制,这可能不是问题,但是仍然不干净)。

使用适当的JSON解析器。这并不复杂。我将cJSON用于中等复杂的情况,您应该能够在几个小时内将其集成。

答案 1 :(得分:1)

要解决当前的问题,请使用以下格式说明符:

"[\"%[^\"]s\",%f,%f,%f],"

解析 set 的正确语法是%[...]s,而不是%s[...]

话虽这么说,sscanf()并不是解析JSON的正确工具。例如,即使是“固定”代码也无法解析包含转义引号的字符串。

使用适当的JSON parser library