【问题标题】:StringCchVPrintf vs sprintf_sStringCchVPrintf 与 sprintf_s
【发布时间】:2012-01-01 11:10:04
【问题描述】:

对于新项目,我应该更喜欢哪个功能? 来自 strsafe.h 或 sprintf_s 的 StringCchVPrintf

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

    如果您使用 C 编写代码,我建议使用 snprintf(因为 snprintf 符合 C99 标准)。

    如果您使用 C++ 编写代码,请考虑使用 C++ 标准库中的 std::ostringstream

    snprintfostringstream 应该在许多系统上都可用,包括非 Windows 系统。

    我通常建议尽可能为标准编码。它将简化您的软件移植到其他系统的过程。尽量避免(或至少小心)使用仅在 WinApi 中可用的函数(AFAIK,没有定义它的标准规范;它只是一个专有实现,大多数其他系统都没有)。

    如果您的应用程序有图形界面,您可以考虑使用跨平台工具包库,例如Qt:它为您提供了一个抽象(Qt API),它应该可以在多个操作系统上运行。

    【讨论】:

    • 次要:使用std::ostringstream(注意“::”后面的“o”)而不是std::stringstream。
    • 我不同意这里的普遍观点。如果您正在编写 Windows 应用程序,那么您绝对不可避免地依赖于 Win32 API。因此,没有真正的理由担心可移植代码:无论如何它都不会是可移植的。我完全赞成在抽象中编写可移植代码,但是您必须小心在上下文中应用这样的决策规则。如果您已经包含了 Windows 标头,并且那里有一个功能可以完全满足您的需求,那么您不妨使用它。
    • 曾经可能会争辩说,如果这个人在问,他不知道那么好......他应该封装他的代码的不可移植部分......
    • 尽管赞同 Cody Gray 的观点,但仍表示支持。在这种情况下,我对使用 Windows 特定的功能毫无疑虑,因为它们碰巧显然更好。但是StringCchPrintf_sprintf_s 都不是。
    • 顺便说一句,我从未使用过 Windows(我的最后一个 Microsoft 系统是 MSDOS6),所以我不知道为什么_sprintf_s 存在在那里...... :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2014-09-20
    • 2010-12-03
    • 2011-06-17
    相关资源
    最近更新 更多