我正在解决spoj问题 其中当前时间戳为sqaured,然后除以400000007,其余部分转换为dat时间 以下是我使用的技术..
remainder = result%4000000007 ;
printf("%ul\n",remainder);
//convert the timestamp into date , time
dt = localtime(&remainder);
// use any strftime format spec here
// strftime(b, sizeof(b), "%m%d%H%M%y", dt);
// fprintf(stdout, "%s", b);
// printf("%s\n",asctime(localtime(&remainder)));
ltime = (time_t)remainder;
printf("%s\n",asctime(dt));
printf("%s\n",ctime(<ime));
显示的错误是分段错误,在asctime
,ltime
是time_t变量,'b'是缓冲区,dt
是struct tm *,我也尝试过转换余下的是time_t
变量,但仍然有效。此外,评论代码显示了我的尝试。
使用调试器,我发现asctime返回null。
问题出在哪里?
答案 0 :(得分:1)
很难确切地说出所提供的代码有什么问题。但是,在您的评论中,您认为remainder
的类型为unsigned long long
。但是,您将其地址传递给localtime()
,这是一个错误。 localtime()
需要time_t *
。
可能发生的情况是,由于传入了错误的类型,localtime()
检测到一些错误并返回NULL
值。然后,将此值传递到asctime()
也会产生NULL
返回值。
顺便说一下,你的printf
有错误的说明符。使用%llu
打印unsigned long long
。