проблема с vsnprintf на 64-битных окнах - PullRequest
0 голосов
/ 20 октября 2011

Я использую (под 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 Ответ

2 голосов
/ 20 октября 2011

Просто удача, что он работал с printf.

time_t 64-битный (если вы не включите 32-битную версию).Так что использование "% d" неправильно.Я предполагаю, что он, кажется, работает, поскольку стек в этом случае содержит нули, где printf ожидает найти старшие 4 байта вашего time_t.

Распечатайте его как 64-битный тип в обоих случаях.

Если вам действительно нужно рассматривать его как 32-битное значение, вы должны привести его к типу: printf ("% d", (int) myvar);,Но не делайте этого, работать со временем достаточно громоздко, и вам не нужно специально пытаться его испортить.

...