我正在使用(在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那样行事?
答案 0 :(得分:2)
只是运气与printf一起使用。
time_t是64位(除非您启用32位版本)。所以使用“%d”是错误的。我猜它似乎工作,因为在这种情况下堆栈恰好包含零,其中printf期望找到你的time_t的高4字节。
在两种情况下都将其打印为64位类型。
如果你真的必须将它视为32位值,你必须抛出它,printf(“%d”,(int)myvar); 。但是不要这样做,处理时间很麻烦,你不需要故意把它搞得一团糟。