#ifndef UNICODE
#define UNICODE
#endif
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <Windows.h>
int main()
{
char buffer[30];
int counter=0;
for(int i=0; i<22 ; i++)
{
Sleep(1000);
printf("%d %d\n",counter++,time(0));
}
system("pause");
return 0;
}
此版本工作正常,它输出计数器和最后22秒的时间戳。不幸的是,当我做了看似无关紧要的事情 - 替换计数器和时间(0),即printf("%d %d\n",time(0),counter++);
时,函数总是打印0代替计数器!对这个奇怪的事实的任何解释?
答案 0 :(得分:3)
time()
会返回time_t
类型,在许多平台上都是64位,而"%d"
是指int
,大多数是32位。
答案 1 :(得分:2)
%d
格式说明符表示printf
期待int
类型。但time()
会返回time_t
;如果它大于int
,那么堆栈上的东西将比printf
期望的更多,基本上抵消了所有后续参数的位置(因此时间值的高位字节被解释为第二个论点,在你的情况下)。
(要确认,您应该比较sizeof(int)
和sizeof(time_t)
。)
有关可能的解决方案,请参阅例如这个问题:What primitive data type is time_t?。
答案 2 :(得分:1)
time()
的结果(至少在Windows上)是64位整数。您必须使用%d
以外的格式进行打印。试试%lld
。
由于英特尔是一个小端处理器,所以当时间到了最后因为你得到了较低的32位。