【问题标题】:Under What Circumstances Would sprintf be Preferred to stringstream?在什么情况下 sprintf 比 stringstream 更受欢迎?
【发布时间】:2012-10-31 01:10:34
【问题描述】:

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

【问题讨论】:

  • “无”是一个有效的答案吗?您可能希望将您的sprintf_snprintf 问题放在C 标签下。
  • Performance 可能,但您必须测量。

标签: c++ visual-c++


【解决方案1】:

我在 C++ 中一直使用sprintf。我发现它更容易使用,尤其是在我编写时间戳和其他特殊格式的字符串时。当然,您可以使用流修饰符来做到这一点,但它太冗长了,您无法一眼看出代码实现了什么。

如果您绝对知道自己不会溢出缓冲区,并且您需要尽可能快的写入或者只是不希望额外的参数混乱,那么它比 _snprintf 更可取。

说到缓冲区,那是另一回事...通常当我在堆栈上有缓冲区或正在写入内存中的现有缓冲区时,我会使用sprintf 或其变体。我不一定想要分配和复制 string 对象的开销。

并不是说我不使用ostringstream——我当然会使用(虽然我更经常使用istringstream,相反)...但我更喜欢使用两个工具而不是一个.

【讨论】:

    【解决方案2】:

    您永远不会更喜欢 sprintf 而不是流,但在某些情况下,您可能会考虑使用 snprintf(或对于 MS 编译器的 _snprintf)。

    对于已测量性能的适当性能密集型代码片段,snprintf 可能会比使用流提高性能。

    此外,如果您已经在维护一个 char[] 缓冲区以传递给 C API,您可以考虑使用 snprintf

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-11
      • 2020-10-25
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 2012-11-25
      • 2018-08-31
      相关资源
      最近更新 更多