我正在考慮編寫一個函數來估計至少一個來自sprintf(),snprintf()函數的格式化字符串的全長。估計格式化的snprintf()字符串的大小?
我的方法是解析格式字符串以查找各種%s,%d,%f,%p args,創建strlen()s,itoa()s和strlen(format_string)的運行總和得到足夠大的內容來爲snprintf()分配適當的緩衝區。
我知道下面的作品,但它需要10X長,因爲所有的printf()函數是非常靈活的,而是因爲如果它很慢。
char c;
int required_buffer_size = snprintf(&c, 1, "format string", args...);
這已經完成了嗎? - 通過建議的方法或其他合理有效的方法 - IE:比sprintf()變種快5-50倍?
採取「10倍長」作爲究竟是什麼?你所描述的函數必須再次實現snprintf纔是正確的,除非你願意將它限制爲格式說明符的一個子集......這是你想出更快選擇的唯一方法。 – vanza
可能的複製http://stackoverflow.com/questions/16647278/minimal-fast-implementation-of-sprintf-for-embedded –
@vanza,你能證明你的要求?我可以做很少的工作,比如對於int32_t使用12的長度,對於int64_t使用24的長度,對於%f使用80的長度等。對於僅處理字符串,我已經具有5-10X。我會RX基準snprintf()。所有的printf()變體都非常慢。有時候他們是唯一正確的解決方案,但這不是其中之一。 – user2548100