c – Unix to Windows:替代vsnprintf来确定长度?
我目前正在将我们的一个
Linux库的代码转换为Windows DLL.
在这个库中,我有一个函数,它以printf-way(格式字符串, 为了做到这一点,我目前正在使用vsnprintf(显而易见的是编写示例代码): #include <stdio.h> #include <stdlib.h> #include <stdarg.h> void foo(const char* fmt,...) { int len = 0; va_list ap; va_start(ap,fmt); len = vsnprintf(0,fmt,ap); printf("len = %dn",len); va_end(ap); } int main(void) { foo("12345%s","67890"); exit(0); } Open Group Base Specifications Issue 6的这个用法涵盖:
当我在Windows系统(Visual Studio 2010)上使用/ analyze进行编译时,出现了问题.编译器/分析仪给了我以下内容:
快速浏览MSDN entry for vsnprintf给了我这个:
好奇的是,上述示例在Windows上“按预期”(即返回给我写入的字符数). 但是,由于我不希望这些依赖于一些不明确的东西,我想知道如果有更好的官方方式实现同??样的目标,而不必希望在将来的某个版本中不会有任何冲突. 谢谢你的时间! 解决方法
Hans Passant评论中提供的答案:
记录的_vscprintf在Windows上提供此功能,所以依靠“未指定的行为”是不必要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |