C中的可变参数scanf
我很好奇是否有可能在C中实现一种可变版本的scanf
。我的意思是如果输入是push (1 2 3)
, scanf
将能够解析为%s %d %d %d
像scanf("%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库这样的正则表达式库。