2012-10-31 44 views
2

有没有人有真正原因,为什么一个宁愿过的sprintf在C++环境stringstream的任何具体的例子吗?而且,如果你在微软世界工作,有什么理由更喜欢sprintf到_snprintf?什么情况下sprintf将优先stringstream?

+0

是“无”有效的答案吗?你可能想把'sprintf'和'_snprintf'问题放在C标签下。 – Xymostech

+2

【产品性能】(http://stackoverflow.com/questions/445315/why-is-snprintf-faster-than-ostringstream-or-is-it)可能,但你必须测量。 –

回答

4

我用sprintf所有的时间在C++中。我发现使用起来更容易,特别是当我写时间戳和其他特殊格式的字符串时。当然,你可以使用流修饰符来做到这一点,但是它太冗长了,你一眼就看不到代码的实现。

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

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

不是说我不使用ostringstream - 我当然会这么做(尽管我经常使用istringstream,换个方式)......但我更喜欢用两种工具代替一种。

1

您绝对不希望sprintf超过数据流,但在某些情况下,您可能会考虑使用snprintf(或对于MS编译器使用_snprintf)。

对于那些性能已经被测量的代码适当性能密集型件,snprintf可能会给你的使用流性能的提升。

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

并且仅仅为了重申,您应该始终偏好_snprintfsnprintf而不是sprintf,因为它们有助于防止各种各样的安全问题和/或难以发现错误。

相关问题