有没有人有任何具体的例子,说明为什么人们更倾向于在C ++环境中使用sprintf而不是字符串流?而且,如果你在微软世界工作,有没有理由更喜欢sprintf到_snprintf?
答案 0 :(得分:4)
我一直在C ++中使用sprintf
。我发现它更容易使用,特别是在我编写时间戳和其他特殊格式的字符串时。当然,你可以使用流修饰符来实现这一点,但它如此冗长,你无法一目了然地看到代码的实现。
如果你绝对知道你不会溢出缓冲区,并且你需要尽可能快的写入或者不想要额外的参数混乱,那么它优于_snprintf
。
说到缓冲区,这是另一回事......通常我会在堆栈上有缓冲区或者写入内存中的现有缓冲区时使用sprintf
或其变体。我不一定想要分配和复制string
个对象的开销。
不是说我不会使用ostringstream
- 我当然会这样做(虽然我经常使用istringstream
,但另一种方式)...但我更喜欢使用两种工具在我的处置而不是一个。
答案 1 :(得分:1)
您绝不会偏好sprintf
优先于流,但在某些情况下,您可能会考虑snprintf
(或_snprintf
用于MS编译器)。
对于衡量性能的性能密集型代码,snprintf
可能会比使用流提升性能。
此外,如果您已经维护snprintf
缓冲区以传递到C API,则可以考虑使用char[]
。
重申一下,您应该总是更喜欢_snprintf
或snprintf
而不是sprintf
因为它们有助于防止各种安全问题和/或很难发现错误。