为什么gettimeofday会返回奇怪的tv_sec?

时间:2015-05-12 14:57:22

标签: c gettimeofday

我有一个应用程序调用{​​{1}}来存储其中部分代码开始运行的tv_sec。这段代码非常简单:

gettimeofday

它通常可以正常工作但有时我会得到意想不到的结果,例如

struct timeval tvnow;
gettimeofday(&tvnow);
int initialTime = tvnow.tv_sec;

tvnow = {tv_sec = 1024, tv_usec = 0}
initialTime = 1401591

为什么会发生这种情况?

此致

1 个答案:

答案 0 :(得分:0)

您使用错误数量的参数调用gettimeofday()。结果行为未定义。如果您不想要时区信息,请将NULL作为第二个参数传递:

struct timeval tvnow;
gettimeofday(&tvnow, NULL);
int initialTime = tvnow.tv_sec;

我会假设你在某种程度上包含了包含struct timeval定义的标题组合(或者你提供了自己的定义),但不是{{1}的原型}。如果在函数调用点处有可见的正确原型,则代码根本不应该编译。如果您的编译器没有发出关于缺少原型的警告,那么您应该弄清楚如何使它这样做(并且总是以这种方式编译),或者获得更好的编译器。