在什么情况下sprintf会优先选择stringstream?

时间:2012-10-31 01:10:34

标签: c++ visual-c++

有没有人有任何具体的例子,说明为什么人们更倾向于在C ++环境中使用sprintf而不是字符串流?而且,如果你在微软世界工作,有没有理由更喜欢sprintf到_snprintf?

2 个答案:

答案 0 :(得分:4)

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

如果你绝对知道你不会溢出缓冲区,并且你需要尽可能快的写入或者不想要额外的参数混乱,那么它优于_snprintf

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

不是说我不会使用ostringstream - 我当然会这样做(虽然我经常使用istringstream,但另一种方式)...但我更喜欢使用两种工具在我的处置而不是一个。

答案 1 :(得分:1)

您绝不会偏好sprintf优先于流,但在某些情况下,您可能会考虑snprintf(或_snprintf用于MS编译器)。

对于衡量性能的性能密集型代码,snprintf可能会比使用流提升性能。

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

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