2

有没有人有任何具体的例子说明为什么在 C++ 环境中更喜欢 sprintf 而不是 stringstream?此外,如果您在 Microsoft 世界工作,是否有任何理由更喜欢 sprintf 而不是 _snprintf?

4

2 回答 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 的缓冲区,则可以考虑使用。

重申一下,您应该始终喜欢_snprintfsnprintf超过,sprintf因为它们有助于防止各种安全问题和/或难以发现的错误。

于 2012-10-31T02:51:55.817 回答