Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在有UNICODE支持和没有UNICODE支持的情况下,如何在程序中使用_stprintf?_C_Windows_Unicode - Fatal编程技术网

在有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早就不再有用了。