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

Inj*_*tea 4 c time unix-timestamp

我需要为我的应用程序记录当前日期和时间.我用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));   
     } 

}
Run Code Online (Sandbox Code Playgroud)

输出是

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
Run Code Online (Sandbox Code Playgroud)

自UNIX时间开始以来,时间没有得到更新.我在另一台计算机上运行相同的程序,运行得很好.为什么我的计算机出现此错误?如何解决?

谢谢

任何帮助赞赏.

编辑:代码中有一个错误,我纠正了它,以便在while循环中更新时间

Jor*_*eña 5

您返回错误time,请参阅文档:

出错,((time_t) -1)返回,并正确设置errno.

当然,相对于EPOCH时间的-1是正在打印的日期.但是,你没有存储或使用返回值time,所以这意味着它t本身就是-1.您是否正在发布您正在使用的确切代码?

因此,time返回-1表示您有错误,您必须检查errno实际错误是什么.但是,显然唯一time应该返回的错误是EFAULT,在这种情况下意味着:

t 您可访问的地址空间之外的点.

更新:尝试这样做,看看会发生什么:

time_t t = time(NULL);
Run Code Online (Sandbox Code Playgroud)

没有太多理由按照你的方式去做.

如果那是你逐字使用的代码,那么我无法解释你是如何得到-1的t,因为-1会被返回,time()但你没有以任何方式访问返回值.这意味着t必须已经-1.鉴于它是未初始化的,我认为这是可能的,但我不确定t在每个程序运行时,未初始化的内存是否总是-1.有人知道吗?不过,这将需要&t以某种方式无效的地址为它触发EFAULT,这将留下t的-1不变值.