如何将可变数量的参数传递给sscanf?

时间:2018-07-18 23:51:56

标签: c variadic-functions

我需要在我的代码中调用以下函数,该函数可用于从指定的字符串格式中提取整数:

int sscanf(const char *str, const char *format, ...)

我需要能够将以句点分隔的数字字符串(即1.20.3.4)传递给该函数,因此我的格式字符串将采用%d.%d.%d.%d的形式。

问题是,我在运行时传递给函数的数字将具有随机数量的数字,并用句点分隔。换句话说,在一个电话上,我可以通过1.23,但是在下一个电话上,我可以通过1.23.45.6。快速生成格式字符串是一项容易的任务,但是我不确定是否可以传入可变数量的用于存储函数结果的剩余参数。

有人知道这是否可行或有其他想法吗?

2 个答案:

答案 0 :(得分:0)

如果您知道整数数量有上限,那么对于这么多参数,总是sscanf()sscanf()的返回值将告诉您已成功扫描的计数,这意味着您无需以程序方式生成格式字符串。

答案 1 :(得分:0)

如何使用MACRO?

定义MACRO,例如:

#define your_func(str, format, args...) \
    // do your own job \
    sscanf(str, format, ##args); \
    // do your own joy

然后像FUNCTION一样使用它:

your_func("1.2", "%d.%d", &a, &b);
your_func("1.2.3", "%d.%d.%d", &a, &b, &c);