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

时间:2009-02-27 13:42:23

标签: c windows unicode

Microsoft的< tchar.h>如果_stprintf已定义,则swprintf定义为_UNICODE,如果未定义sprintf则定义swprintf。但这些功能有不同的论点!在sprintf中,第二个参数是缓冲区大小,但_stprintf没有这个。

有人蠢蠢欲动吗?如果是这样,这是一个很大的问题。如何在我的计划中使用_UNICODE,让他们使用{{1}}?

3 个答案:

答案 0 :(得分:5)

你在这里看到平行进化。 swprintf是标准C的后来者,在发现(A)8位不足以用于文本和(B)你应该传递缓冲区大小和缓冲区之后。 TCHAR是一个统一ASCII和Unicode API的微软想法。他们丢球,失分(B)。正确的TCHAR解决方案应该是将_stprintf定义为swprintfsnprintf

然后解决方案是简单地换<tchar.h>并自己完成。

答案 1 :(得分:1)

  

这些函数采用不同的论点!

MS编译器有两种不同的版本。看看here。 这符合ANSI标准。但我认为这不能回答你的问题。我会跳过它一段时间,而不是告诉你如何保持一致性。

  

让他们使用和不使用_UNICODE吗?

根据MS推荐,最好使用'安全字符串功能'。见this。使用`_stprintf_s',我想你会解决你的问题。

  有人蠢蠢欲动吗?

已编辑:我不这么认为。我没有理由为你提供 的答案。当我得到更具体的东西时,我会发布更新。在此期间,请查看MSalters的解释。

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

免责声明:我不是在为雷蒙德的巨人辩护,只是指出让我感到奇怪的东西!

答案 2 :(得分:0)

这可能无法直接回答问题,但另一种方法是使用_stprintf_s。你必须添加额外的parm,但它仍然会以两种方式编译,并且更具有前瞻性。