gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:27:31 26 4
gpt4 key购买 nike

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

如果我用简单的 printf("%d", myvar) 转储变量一切工作正常。

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

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

(var1_time 和 var2_time 都是错误的!)

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

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

最佳答案

它与 printf 一起工作只是运气。

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

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

如果您确实必须将其视为 32 位值,则必须对其进行强制转换, printf("%d", (int)myvar); 。但不要这样做,处理时间已经够麻烦的了,你不需要刻意去搞乱它。

关于c - 在 64 位 Windows 上使用 vsnprintf 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com