如何在支持空字段的同时使用sscanf解析逗号分隔字符串中的字段?

Bel*_*rog 11 c csv string parsing scanf

我有一个逗号分隔的字符串,可能包含空字段.例如:

1,2,,4
Run Code Online (Sandbox Code Playgroud)

使用基本的

sscanf(string,"%[^,],%[^,],%[^,],%[^,],%[^,]", &val1, &val2, &val3, &val4);
Run Code Online (Sandbox Code Playgroud)

我得到空字段之前的所有值,以及从空字段开始的意外结果.

当我从sscanf()中删除空字段的表达式时,

sscanf(string,"%[^,],%[^,],,%[^,],%[^,]", &val1, &val2, &val3, &val4);
Run Code Online (Sandbox Code Playgroud)

一切都很好.

由于我不知道何时会得到一个空字段,有没有办法重写表达式以优雅地处理空字段?

Chr*_*isF 9

如果您使用strtok逗号作为分隔符,您将获得一个字符串列表,其中一个或多个字符串将为null/zero length.

有关更多信息,请查看我的答案.


Sin*_*nür 5

男人sscanf:

[ 匹配指定的一组接受字符中的非空字符序列;

(重点补充).

  • 确实如此。没有标志来更改此行为吗? (2认同)