2011-03-20 140 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