在有UNICODE支持和没有UNICODE支持的情况下,如何在程序中使用_stprintf?
如果定义了在有UNICODE支持和没有UNICODE支持的情况下,如何在程序中使用_stprintf?,c,windows,unicode,C,Windows,Unicode,如果定义了\UNICODE,微软将\stprintf定义为swprintf,如果未定义sprintf。但是这些函数采用不同的参数!在swprintf中,第二个参数是缓冲区大小,但是sprintf没有这个参数 有人搞错了吗?如果是这样,这是一个大问题。我如何在我的程序中使用\u stprintf,并让他们使用和不使用\u UNICODE 这些函数采用不同的参数 MS编译器有两种不同的版本。看一看。 这符合ANSI标准。但我认为这并不能回答你的问题。我会略过一段时间,告诉你怎样才能做到一致性 让他们
\UNICODE
,微软将\stprintf
定义为swprintf
,如果未定义sprintf
。但是这些函数采用不同的参数!在swprintf
中,第二个参数是缓冲区大小,但是sprintf
没有这个参数
有人搞错了吗?如果是这样,这是一个大问题。我如何在我的程序中使用\u stprintf
,并让他们使用和不使用\u UNICODE
这些函数采用不同的参数
MS编译器有两种不同的版本。看一看。
这符合ANSI标准。但我认为这并不能回答你的问题。我会略过一段时间,告诉你怎样才能做到一致性
让他们使用和不使用UNICODE
您最好按照MS的建议使用“安全字符串函数”。看见使用“打印”,我想你会解决你的问题
有人搞错了吗
编辑:我不这么认为。我手边没有理由给你答案。当我得到更具体的东西时,我会发布更新。同时,看看MSalters的解释
一件奇怪的事情是MS的C运行时声称与ISO标准兼容
免责声明:我不是在为雷德蒙德巨人辩护,只是指出让我觉得奇怪的东西您在这里看到了平行的进化
swprintf
是标准C的后起之秀,因为它发现(a)8位不足以用于文本,以及(B)应该将缓冲区大小与缓冲区一起传递TCHAR
是微软统一ASCII和Unicode API的想法。他们丢了球,错过了(B)点。正确的TCHAR
解决方案应该是将\u stprintf
定义为swprintf
或snprintf
解决方案是简单地包装
,然后自己做。这可能不是直接回答问题,但另一种选择是使用\u stprintf\u s
。您必须添加额外的parm,但它仍将以两种方式编译,并且更能证明未来。没有必要这样说,因为ANSI C标准是重新打包的ISO C标准。微软不是ISO成员;他们是ANSI会员。(INCITS today),这反过来又是ISO成员。@MSalters:我不是在为MS辩护,只是指出了让我印象深刻的东西。现在回想起来,最好完全放弃非unicode版本。tchar.h早就不再有用了。