在64位Windows上使用vsnprintf时出现问题

时间:2011-10-20 16:42:56

标签: c visual-studio-2010 64-bit

我正在使用(在windows7,VS2010下)time_t类型。 所以......

如果我使用简单的printf("%d", myvar)转储我的变量 一切都很好。

但是现在,如果我使用vsnprintf()(或使用va_start / va_end和co ...的任何代码) 以time_t为参数,我得到错误的值!?

myprintf(">>%d %d", var1_time, var2_time);

(var1_time和var2_time都错了!)

我的猜测:va_xx函数不知道如何处理64位!?

当然我可以使用“%lld”但是......我怎么能像printf那样行事?

1 个答案:

答案 0 :(得分:2)

只是运气与printf一起使用。

time_t是64位(除非您启用32位版本)。所以使用“%d”是错误的。我猜它似乎工作,因为在这种情况下堆栈恰好包含零,其中printf期望找到你的time_t的高4字节。

在两种情况下都将其打印为64位类型。

如果你真的必须将它视为32位值,你必须抛出它,printf(“%d”,(int)myvar); 。但是不要这样做,处理时间很麻烦,你不需要故意把它搞得一团糟。