在什么情况下,sprintf比stringstream更受青睐?

3

在C++环境中,为什么会有人更喜欢使用sprintf而不是stringstream呢?有没有一些具体的例子和原因可以说明这个问题呢?此外,如果你正在使用微软的开发工具,是否有任何理由优先选择sprintf而不是_snprintf函数呢?


"none" 是一个有效的答案吗?你可能想把你的 sprintf vs _snprintf 问题放在 C 标签下。 - undefined
2
性能可能会有所提升,但你需要进行测量。 - undefined
2个回答

7

我经常在C++中使用sprintf。我觉得这样更容易操作,特别是当我写时间戳和其他格式化的字符串时。当然,你也可以用流修改器来实现,但是那太冗长了,一眼看不出代码的实现。

如果你确定不会溢出缓冲区,并且需要最快的写入速度或者不想要额外的参数混乱,那么它比_snprintf更可取。

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

并不是说我不使用ostringstream——我当然会用(尽管我更经常使用istringstream,反过来做)……但我更喜欢拥有两个工具而不是一个。


1

你永远不会选择使用 sprintf 而不是 streams,但在某些情况下,你可能会考虑使用 snprintf(或 MS 编译器的 _snprintf)。

对于性能要求高的代码段,在经过测试后,snprintf 可能比使用 streams 更快。

此外,如果你已经维护了一个 char[] 缓冲区以传递给 C API,那么你可能会考虑使用 snprintf

再次强调,你应该始终优先选择 _snprintfsnprintf,因为它们有助于防止各种安全问题和/或难以发现的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接