2011-03-20 66 views
1

尝试编写nodejs sprintf本机实现,同时提高我的C++技能,我研究了如何为sprintf提供未知长度的参数。我首先虽然我可以使用vsprintf,但无法找到如何填充它。基本上,nodejs/v8绑定为我提供了一个参数数组,我可以将其转换为向量或别的东西,但不知道如何将其转换为vsprintf期望的va_list或任何其他可以使其工作的替代方法。来自未知参数的C++ sprintf

有没有人可以提出我的策略? d)。

回答

1

通常它是编译器和平台相关的。您可以查看您所选编译器的实现va_startva_arg等,并使用asm指令以正确的方式将数据推入堆栈。

虽然我不这样做,但如果您的实现对模拟sprintf - 循环参数很重要,并且一次处理一个连接结果的结果,那将更加健壮和便携。

+0

不需要汇编......你可以将数据排列在任何旧字节数组中,并创建一个指向它的'va_list',因为'va_list'实际上只不过是一个指针而已。尽管如此,它仍然是特定于实现的,并且由于他不得不处理格式字符串以找出要存储的数据类型,所以他可能会按照您的建议逐步处理它。 – 2011-03-20 01:39:56