Microsoft 的 将 _stprintf 定义为 swprintf,如果 _UNICODE 已定义,则 sprintf 未定义。但是这些函数采用不同的参数!在 swprintf 中,第二个参数是缓冲区大小,但 sprintf 没有这个。

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

最佳答案

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

解决方案是简单地包装 <tchar.h> 并自己完成。

10-08 08:32