【发布时间】:2013-01-29 02:44:26
【问题描述】:
我之前试过问这个,但我忘了包括一个问题(因为我刚刚加入该网站),所以我实际上并没有解决我的问题,人们只是告诉我为什么第二段代码是错误的,而不是如何让它工作。这是家庭作业的一部分。其目的是最终将 INT_MAX+1 放入 ctime 以证明在 32 位机器中日期不能超过 ~2038 的点,因为它自 1970 年以来的秒数用完了位。我的问题很简单,我怎么能把很长很长进入ctime?如何使第二段代码工作?
一切都在 C99 中编译,如果这很重要的话。
作品:
long x = INT_MAX-1;
printf("Time: %s",ctime(&x));
不起作用:
long long x = INT_MAX+1;
printf("Time: %s",ctime(&x));
错误:
incompatible pointer type: "Expected 'const time_t *' but argument is of type 'long long int *'"
【问题讨论】:
-
你没有做作业。双关语。
-
我不知道有一个操作系统在 1975 年使用一个纪元。Unix 纪元是 1970-01-01 00:00:00 +00:00。您不能将
long long *传递给ctime()而不会导致未定义的行为;它需要一个time_t *。这个问题在 INT_MAX == LONG_MAX 和 INT_MAX + 1 未定义的 32 位机器上是无法解决的(因为有符号溢出会导致未定义的行为)。您的课堂作业可能要求您使用time_t值,将其设置为INT_MAX,添加一个并希望它换行(不保证),然后打印出它的值以及您从ctime()获得的值,应该是 1901 年的日期。 -
shf301,这是我问的问题,没有得到回答
标签: c long-integer c99 ctime long-long