gpt4 book ai didi

C time.h环绕

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:59 26 4
gpt4 key购买 nike

我想将最大可能时间分配给 time_t 变量,然后将其转换为字符串并打印出结果。

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

int main()
{
time_t maxTime;
maxTime= LONG_LONG_MAX;
char *strOfMaxTime;
*strOfMaxTime = ctime(maxTime);

printf("%s",strOfMaxTime);

return 0;
}

最佳答案

OP 的代码错误地使用了 char *ctime(const time_t *timer)

time_t maxTime;
char *strOfMaxTime;
// *strOfMaxTime = ctime(maxTime);
strOfMaxTime = ctime(&maxTime);

然而,简单地分配 maxTime= LONG_LONG_MAX; 并不是确定系统可以处理的最长时间的正确方法。

以下是一种试错法 - 可能存在各种实现限制。当 time_t 超出范围时,localtime() 返回 NULL

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

time_t max_time() {
time_t t0, t1;
time_t delta = 1;
time(&t0); // now
while (t0 != -1) {
t1 = t0 + delta;
if (localtime(&t1) == NULL) { // If conversion fail, quit doubling.
break;
}
delta *= 2; // 2x for the next increment.
t0 = t1;
}
while (delta) {
t1 = t0 + delta;
if (localtime(&t1) != NULL) { // if succeeds, update t0
t0 = t1;
}
delta /= 2; // try smaller and smaller deltas.
}
printf("%s %lld\n", ctime(&t0), (long long) t0);
return t0;
}

int main(void) {
max_time();
return 0;
}

输出(注意 17:59:59 取决于时区,年份 2,147,483,647 是最大 32 位有符号整数。YMMV。)

Tue Dec 31 17:59:59 2147483647
67767976233532799

关于C time.h环绕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47764797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com