ctime返回NULL

时间:2016-10-21 20:50:16

标签: c

我正在使用ctime。但是它总是返回null。所以它在sprintf线上核心。它工作得更早。所以不确定为什么它会随机返回null。

我有以下代码段:

int main()
{
 char avp_val[50];

 uint32_t date_value=1477069401;

sprintf(avp_val,"%s",ctime((time_t*)(&date_value)));

  return;
}

1 个答案:

答案 0 :(得分:1)

它对我有用,但代码仍然很奇怪。

我不确定您为什么要使用uint32_t来存储时间。它应为time_t(如果必须,则为int)。时间不是无条件的,也可能是负面的(我听说1970年之前有时间)。它也不应该是32位;如果你这样做you'll run out of time in 2038。这些天大多数机器使用64位time_t

您不应该使用ctime,因为它会重复使用相同的指针。我怀疑你为什么要做sprintf来复制字符串。更好的是,使用传递分配字符串的ctime_r

这是一种更简单的方法。

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

int main() {
    time_t date_value = 1477069401;

    char date_str[26];

    ctime_r(&date_value, date_str);

    puts(date_str);

    return 0;
}