在C++环境中,为什么会有人更喜欢使用sprintf而不是stringstream呢?有没有一些具体的例子和原因可以说明这个问题呢?此外,如果你正在使用微软的开发工具,是否有任何理由优先选择sprintf而不是_snprintf函数呢?
在C++环境中,为什么会有人更喜欢使用sprintf而不是stringstream呢?有没有一些具体的例子和原因可以说明这个问题呢?此外,如果你正在使用微软的开发工具,是否有任何理由优先选择sprintf而不是_snprintf函数呢?
我经常在C++中使用sprintf
。我觉得这样更容易操作,特别是当我写时间戳和其他格式化的字符串时。当然,你也可以用流修改器来实现,但是那太冗长了,一眼看不出代码的实现。
如果你确定不会溢出缓冲区,并且需要最快的写入速度或者不想要额外的参数混乱,那么它比_snprintf
更可取。
说到缓冲区,通常情况下,当我有一个堆栈上的缓冲区或者我正在写入内存中的现有缓冲区时,我会使用sprintf
或其变体。我不一定想要分配和复制string
对象的开销。
并不是说我不使用ostringstream
——我当然会用(尽管我更经常使用istringstream
,反过来做)……但我更喜欢拥有两个工具而不是一个。
你永远不会选择使用 sprintf
而不是 streams,但在某些情况下,你可能会考虑使用 snprintf
(或 MS 编译器的 _snprintf
)。
对于性能要求高的代码段,在经过测试后,snprintf
可能比使用 streams 更快。
此外,如果你已经维护了一个 char[]
缓冲区以传递给 C API,那么你可能会考虑使用 snprintf
。
再次强调,你应该始终优先选择 _snprintf
或 snprintf
,因为它们有助于防止各种安全问题和/或难以发现的错误。
sprintf
vs_snprintf
问题放在 C 标签下。 - undefined