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

标签 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));   
     } 

}

输出是

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 返回错误,请参阅 docs :

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

当然,相对于 EPOCH 时间的 -1 是正在打印的日期。但是,您没有存储或使用 time 的返回值,因此这意味着 t 本身不知何故为 -1。您发布的代码与您使用的代码完全一致吗?

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

t points outside your accessible address space.

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

time_t t = time(NULL);

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

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

关于c - C 中的时间函数始终显示 "Wed Dec 31 23:59:59 1969",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34469262/

相关文章:

c++ - 计算线程内的时间

c - 如何确定哪一天是 C 中当前语言环境中的第一天

javascript - 图像类别根据一天中的时间而变化

typescript - NestJS:如何将 Date 对象转换为自定义格式(自定义字符串或 unix 时间戳)

php - 转换 unix 时间戳 php

两行不同的c语法?

c - CUDA 上的 block 间屏障

c - 为什么它们都指向同一个地方?

c - 如何定义绝对值的顶点?

javascript - 如何在 javascript 中将字符串转换为 Unix 时间戳?