有没有人有任何具体的例子说明为什么在 C++ 环境中更喜欢 sprintf 而不是 stringstream?此外,如果您在 Microsoft 世界工作,是否有任何理由更喜欢 sprintf 而不是 _snprintf?
问问题
2393 次
2 回答
5
我sprintf
一直在 C++ 中使用。我发现它更容易使用,尤其是在我编写时间戳和其他特殊格式的字符串时。当然,您可以使用流修饰符来做到这一点,但它太冗长了,您无法一眼看出代码实现了什么。
_snprintf
如果您绝对知道您不会溢出缓冲区,并且您需要尽可能快的写入或者只是不希望额外的参数混乱,那么最好。
说到缓冲区,那是另一回事......通常sprintf
当我在堆栈上有一个缓冲区或者我正在写入内存中的现有缓冲区时,我会使用它的变体。我不一定想要分配和复制string
对象的开销。
并不是说我不使用ostringstream
——我当然会使用(尽管我更经常使用istringstream
,相反)......但我更喜欢使用两种工具而不是一个。
于 2012-10-31T01:17:45.527 回答
1
您永远不会喜欢sprintf
流,但在某些情况下您可能会考虑snprintf
(或_snprintf
对于 MS 编译器)。
对于已测量性能的适当性能密集型代码片段,snprintf
可能会比使用流提高性能。
snprintf
此外,如果您已经在维护char[]
要传递给 C API 的缓冲区,则可以考虑使用。
重申一下,您应该始终喜欢_snprintf
或snprintf
超过,sprintf
因为它们有助于防止各种安全问题和/或难以发现的错误。
于 2012-10-31T02:51:55.817 回答