代码之家  ›  专栏  ›  技术社区  ›  Steve Hanov

在有和没有UNICODE支持的情况下,我如何在程序中使用_stprintf?

  •  4
  • Steve Hanov  · 技术社区  · 16 年前

    微软<tchar.h>定义 _stprintf swprintf _UNICODE 已定义,以及 sprintf swprintf ,第二个参数是缓冲区大小,但是 没有这个。

    有人搞砸了吗?如果是这样,这是一个很大的问题。我如何使用 _stprintf 在我的程序中,让它们在有和没有的情况下工作 ?

    3 回复  |  直到 9 年前
        1
  •  5
  •   MSalters    16 年前

    你在这里看到了平行的进化。 swprintf 是标准C的后来者,在发现(a)8位不足以用于文本和(B)您应该将缓冲区大小与缓冲区一起传递之后。 TCHAR 察尔 解决方案应该是定义 _stprintf 作为要么 swprintf snprintf .

    解决方案就是简单地包装 <tchar.h> 你自己来做。

        2
  •  1
  •   dirkgently    16 年前

    这些函数接受不同的参数!

    here . 这符合ANSI标准。但我认为这并没有回答你的问题。我暂时跳过它,而是告诉你如何保持一致性。

    他们是否可以使用_UNICODE?

    您最好按照MS的建议使用“安全字符串函数”。看 this .使用`_stprintf_s',我认为你会解决你的问题。

    有人搞砸了吗?

    编辑: 我不这么认为。我手头没有基本原理可以给你

    一件奇怪的事情是MS的C运行时 does not 声称与ISO标准兼容。

    免责声明:我不是在为雷德蒙德的巨人辩护,只是指出一些让我觉得奇怪的事情!

        3
  •  0
  •   hunter    9 年前

    这可能不是直接回答问题,但一种选择是使用 _stprintf_s 。您必须添加额外的parm,但这样它仍然可以双向编译,并且更经得起未来考验。