有沒有人有真正原因,爲什麼一個寧願過的sprintf在C++環境stringstream的任何具體的例子嗎?而且,如果你在微軟世界工作,有什麼理由更喜歡sprintf到_snprintf?什麼情況下sprintf將優先stringstream?
2
A
回答
4
我用sprintf
所有的時間在C++中。我發現使用起來更容易,特別是當我寫時間戳和其他特殊格式的字符串時。當然,你可以使用流修飾符來做到這一點,但是它太冗長了,你一眼就看不到代碼的實現。
如果您絕對知道您不會溢出緩衝區,並且您需要儘可能快的寫入或者不想讓額外的參數混亂,則優先於_snprintf
。
說到緩衝區,這是另一回事......通常我會使用sprintf
或其變體,當我在堆棧上有一個緩衝區或正在寫入內存中的現有緩衝區時。我不一定要分配和複製string
對象的開銷。
不是說我不使用ostringstream
- 我當然會這麼做(儘管我經常使用istringstream
,換個方式)......但我更喜歡用兩種工具代替一種。
1
您絕對不希望sprintf
超過數據流,但在某些情況下,您可能會考慮使用snprintf
(或對於MS編譯器使用_snprintf
)。
對於那些性能已經被測量的代碼適當性能密集型件,snprintf
可能會給你的使用流性能的提升。
此外,如果您已經保留char[]
緩衝區以傳遞到C API,則可以考慮使用snprintf
。
並且僅僅爲了重申,您應該始終偏好_snprintf
或snprintf
而不是sprintf
,因爲它們有助於防止各種各樣的安全問題和/或難以發現錯誤。
相關問題
- 1. 爲什麼sprintf()在這種情況下工作?
- 2. istringstream,ostringstream和stringstream有什麼區別? /爲什麼不在每種情況下使用stringstream?
- 3. 在什麼情況下HTTP_REFERER將爲空
- 4. 在不使用stringstream的情況下將char *轉換爲abitrary numeric
- 5. CASE語句SQL:情況優先?
- 6. TransactionScope優先級(擺脫死鎖情況)
- 7. C++:這種情況下引用的優點是什麼?
- 8. 在這種情況下有什麼優點和缺點?
- 9. Javascript原型 - 在這種情況下有什麼優勢?
- 10. 如何在代碼優先的情況下共享EF6對象
- 11. 這種情況下最好的情況是什麼?
- 12. 在什麼情況/情況下,dynamic_cast <>可能會失敗?
- 13. 在什麼情況下調用__rmul__?
- 14. fgets()在什麼情況下卡住了?
- 15. 在什麼情況下document.open()返回null?
- 16. 什麼情況下**會有用?
- 17. 在什麼情況下CopyOnWriteArrayList適合?
- 18. 爲什麼在這三種情況下
- 19. 在什麼情況下AppDomain.DoCallback()會失敗?
- 20. 在什麼情況下glGenBuffers/glGenBuffersARB失敗?
- 21. 「:」在這種情況下做什麼?
- 22. 在什麼情況下會http.ListenAndServe返回
- 23. sched_yield在這種情況下做什麼?
- 24. 有什麼用在這種情況下
- 25. 什麼是在這種情況下
- 26. 什麼是以下情況的查詢
- 27. *在這種情況下做什麼?:
- 28. ConcurrentBag.TryTake()在什麼情況下會失敗?
- 29. 爲什麼在這種情況下
- 30. 在什麼情況下使用Django formset?
是「無」有效的答案嗎?你可能想把'sprintf'和'_snprintf'問題放在C標籤下。 – Xymostech
【產品性能】(http://stackoverflow.com/questions/445315/why-is-snprintf-faster-than-ostringstream-or-is-it)可能,但你必須測量。 –