sscanf - 我该怎么处理?

时间:2018-02-21 14:23:36

标签: c scanf

我尝试使用sscanf解析ascii字符串。字符串如下所示:

"参数1""参数2"""" Param4"

问题是可能存在Param3,但不能保证。我对Param3也不感兴趣,但如果它存在,必须为它做好准备。

我按以下方式解析参数:

char ParamStr[] = "\"Param1\",\"Param2\",\"\",\"Param4\"";
char Param1[10];
char Param2[10];
char Param4[10];

sscanf(ParamStr, "\"%[^\"]\", \"%[^\"]\", \"%*[^\"]\", \"%[^\"]\"", Param1, Param2, Param4);

但是当我解析Param3时,我得到的Param4结果不正确。

处理像Param3这样的参数的正确方法是什么?"动态"?

1 个答案:

答案 0 :(得分:4)

您可以使用scanf的返回值并使用2种不同的格式字符串:

// Try to scan all 4....
int count = sscanf(ParamStr, "\"%[^\"]\",\"%[^\"]\",\"%[^\"]\",\"%[^\"]\"",
    Param1, Param2, Param3, Param4);
// Didn't get 4? Try for 3 using a different format string
if (4 != count) {
    count = sscanf(ParamStr, "\"%[^\"]\",\"%[^\"]\",\"\",\"%[^\"]\"", 
        Param1, Param2, Param4);
}