我正在使用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;
}发布于 2016-10-23 16:32:42
它对我来说是有效的,但是代码仍然很奇怪。
我不明白你为什么要用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;
}https://stackoverflow.com/questions/40200615
复制相似问题