C 中的时间函数总是显示 "Wed Dec 31 23:59:59 1969"

time function in C always displays "Wed Dec 31 23:59:59 1969"

我需要为我的应用程序记录当前日期和时间。 我用C写了代码,附上代码

#include <stdio.h>
#include <time.h>

int main()
{   time_t t;


     while(1)
     { time(&t);
       printf("Today's date and time : %s",ctime(&t));   
     } 

}

输出为

Today's date and time : Wed Dec 31 23:59:59 1969
Today's date and time : Wed Dec 31 23:59:59 1969
Today's date and time : Wed Dec 31 23:59:59 1969
Today's date and time : Wed Dec 31 23:59:59 1969

自 UNIX 时间开始以来,时间未更新。 我 运行 在另一台计算机上使用相同的程序并且它 运行 很好。 为什么我的电脑会出现这个错误,我该如何解决?

谢谢

感谢任何帮助。

编辑:代码中有错误,我已更正它以便在 while 循环内更新时间

您在被 time 编辑 return 时出错,请参阅 docs:

On error, ((time_t) -1) is returned, and errno is set appropriately.

当然,相对于EPOCH时间的-1是正在打印的日期。但是,您没有存储或使用 time 的 return 值,因此这意味着 t 本身在某种程度上是 -1。您发布的代码与您使用的代码完全一致吗?

因此,由于 time returns -1 表示您有错误,您必须检查 errno 以查看实际错误是什么。然而,显然 time 应该 return 的唯一错误是 EFAULT,在这种情况下意味着:

t points outside your accessible address space.

更新:试试看会发生什么:

time_t t = time(NULL);

没有太多理由按照您原来的方式去做。

如果这确实是您逐字使用的代码,那么我无法解释您如何在 t 中获得 -1,因为 -1 将被 returned通过 time() 但您没有以任何方式访问 return 值。这意味着 t 必须已经是 -1。鉴于它是未初始化的,我认为这是可能的,但我不确定 t 的未初始化内存是否可能在每个程序 运行 上始终为 -1。有人知道吗?尽管如此,它还是会要求&t在某种程度上是一个无效地址以触发EFAULT,这将留下t的值-1 不变。

您没有提到您使用的是什么操作系统。 所以不清楚你是否有RTC(实时时钟)。

值得注意的是:

Non-PC systems, such as embedded systems built around system-on-chip processors, use other implementations. They usually won't offer the same functionality as the RTC from a PC/AT.

根据文档 EFAULT 发生在 :

t points outside your accessible address space

不过,我不确定什么时候会发生。

实际上 EFAULT 被定义为 here 为:

#define EFAULT          14      /* Bad address */


你的代码一开始给我的结果与你的相似。 但是这个对我有用:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{

    time_t *t;
    t=(time_t*)malloc(sizeof(*t));
    time(t);
    printf("Today's date and time : %s",ctime(t));
    free(t); //Clean up the mess we've created
    return 0;
}

但我不知道为什么。

参考: RTC