2012-10-31 47 views
2

有沒有人有真正原因,爲什麼一個寧願過的sprintf在C++環境stringstream的任何具體的例子嗎?而且,如果你在微軟世界工作,有什麼理由更喜歡sprintf到_snprintf?什麼情況下sprintf將優先stringstream?

+0

是「無」有效的答案嗎?你可能想把'sprintf'和'_snprintf'問題放在C標籤下。 – Xymostech

+2

【產品性能】(http://stackoverflow.com/questions/445315/why-is-snprintf-faster-than-ostringstream-or-is-it)可能,但你必須測量。 –

回答

4

我用sprintf所有的時間在C++中。我發現使用起來更容易,特別是當我寫時間戳和其他特殊格式的字符串時。當然,你可以使用流修飾符來做到這一點,但是它太冗長了,你一眼就看不到代碼的實現。

如果您絕對知道您不會溢出緩衝區,並且您需要儘可能快的寫入或者不想讓額外的參數混亂,則優先於_snprintf

說到緩衝區,這是另一回事......通常我會使用sprintf或其變體,當我在堆棧上有一個緩衝區或正在寫入內存中的現有緩衝區時。我不一定要分配和複製string對象的開銷。

不是說我不使用ostringstream - 我當然會這麼做(儘管我經常使用istringstream,換個方式)......但我更喜歡用兩種工具代替一種。

1

您絕對不希望sprintf超過數據流,但在某些情況下,您可能會考慮使用snprintf(或對於MS編譯器使用_snprintf)。

對於那些性能已經被測量的代碼適當性能密集型件,snprintf可能會給你的使用流性能的提升。

此外,如果您已經保留char[]緩衝區以傳遞到C API,則可以考慮使用snprintf

並且僅僅爲了重申,您應該始終偏好_snprintfsnprintf而不是sprintf,因爲它們有助於防止各種各樣的安全問題和/或難以發現錯誤。

相關問題