2

現在のタイムスタンプを2乗してから400000007で割り、残りをdat時間に変換するspoj問題を解決しています..

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));

表示されているエラーは セグメンテーション違反 であり、time_t 変数でasctimeltimeあり、'b' はバッファーで dtあり、構造体 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 に答える