C中的可变参数scanf

我很好奇是否有可能在C中实现一种可变版本的scanf 。我的意思是如果输入是push (1 2 3)scanf将能够解析为%s %d %d %dscanf("%s (%d)", string, some_list)

它将占用%d所有实例并将它们(按顺序)附加到列表中……

我在说感觉吗?

编辑:对于指定的输入, string == "push"some_list == [1, 2, 3]

难道不是vscanf,vssscanf,vsfcanf是你在寻找什么? 从C99开始,它们是可用的。

这是vscanf函数的使用说明和示例。 请注意,C是编译语言和强类型语言,您需要正确地给出格式说明符。 做一些类似于更高语言dos的事情将涉及更多的工作(但是可能因为function是用C语言编写的)。

当然。 您可以实现一个像这样工作的scanf版本。

它不属于C库的原因是它需要没有内置到库中的数据结构。 像链表,或可resize的数组。

但无论如何,你可以制作一个接受高级模式的scanf函数。 它看起来像super_scanf("%{s:allocate} (%{d*:array,append)", &string, &array)

但通常情况下,你要么编写自己的标记化器和简单的解析器,要么转向像lex / yacc那样强大的东西。 或者您可以使用像PCRE库这样的正则表达式库。