我要求为我的应用程序记录当前日期和时间。 我用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循环中更新时间
答案 0 :(得分:5)
time
返回错误,请参阅docs:
出错时,返回
((time_t) -1)
,并正确设置errno。
当然,相对于EPOCH时间的-1是正在打印的日期。但是,您没有存储或使用time
的返回值,因此这意味着t
本身在某种程度上为-1。您是否发布了正在使用的确切代码?
因为time
返回-1表示您有错误,您必须检查errno
以查看实际错误是什么。但是,显然time
应返回的唯一错误是EFAULT
,在此上下文中表示:
t
点位于您可访问的地址空间之外。
更新:尝试执行此操作以查看会发生什么:
time_t t = time(NULL);
没有太多理由按照你的方式去做。
如果这是您逐字使用的代码,那么我无法解释您在t
中获得-1的原因,因为-1将由time()
返回但是您没有以任何方式访问返回值。这意味着t
必须已经为-1。鉴于它是未初始化的,我认为这是可能的,但我不确定t
的未初始化内存是否可能在每次程序运行时始终为-1。有人知道吗?但是,还要要求&t
在某种程度上是一个无效的地址,它会触发EFAULT
,这会使t
的值保持不变-1
答案 1 :(得分:-1)
您还没有提到您正在使用的操作系统。 所以目前还不清楚你是否有RTC(实时时钟)。
值得注意的是:
非PC系统,例如围绕片上系统构建的嵌入式系统 处理器,使用其他实现。他们通常不会提供 与PC / AT的RTC功能相同。
根据文档 EFAULT 在以下时间发生:
t 指出您可访问的地址空间
但是,我不确定何时会发生这种情况。
实际上 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