2

我正在解决 spoj 问题,其中当前时间戳被平方,然后除以 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(&ltime));

显示的错误是分段错误,在asctime,也是ltimetime_t 变量,'b' 是缓冲区, dt是 struct tm *,而且我试图将余数转换为time_t变量,但仍然有效。此外,注释代码显示了我的尝试。使用调试器,我发现 asctime 返回 null 。

问题出在哪里 ?

4

1 回答 1

1

很难从所提供的代码中确切地说出什么问题。但是,在您的评论中,您关联remainder的类型为unsigned long long. 但是,您将其地址传递给localtime(),这是一个错误。localtime()期望一个time_t *.

可能发生的情况是由于传入了错误的类型,localtime()检测到一些错误并返回了一个NULL值。然后,将这个值传递给也会asctime()产生一个NULL返回值。

顺便说一句,您printf的说明符错误。用于%llu打印unsigned long long.

于 2013-04-23T23:31:53.747 回答