2013-04-23 3 views
2

я решение проблемы SPOJ, где ток штамп времени sqaured и затем деленный на 400000007, а остаток превращает в Датах время ниже метод я использовал ..преобразовать длинный номер, дату, время в C

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, также ltime является time_t переменной, «B» представляет собой буфер, dt является структура тм *, а также я попытался преобразовать остаток в time_t переменной, но до сих пор вмятина работа , Кроме того, Прокомментированный код показывает мои попытки. Используя отладчик, я обнаружил, что asctime возвращает null.

В чем проблема?

+1

Остаток и результат как минимум длинный (64-битный int)? Кроме того, все предупреждения компилятора с включенным/wAll? –

+0

Да, они unsigned long long – Subbu

+0

@MichaelDorgan: но я не уверен, что они 64-разрядные – Subbu

ответ

1

Трудно сказать, что именно не так из представленного кода. Однако в ваших комментариях вы указали, что remainder имеет тип unsigned long long. Однако вы передаете свой адрес localtime(), что является ошибкой. localtime() ожидает time_t *.

Возможно, произошло то, что из-за неправильного типа, который был передан, localtime() обнаружил некоторую ошибку и возвратил значение NULL. Затем, передав это значение в asctime(), получилось также возвращаемое значение NULL.

В отличие от вашего printf имеет неправильный указатель. Используйте %llu для печати unsigned long long.

+1

Да, следовательно, предложение my/wall. Предупреждения действительно имеют значение :) –

+0

@MichaelDorgan: Word. – jxh

+0

@MichaelDorgan, @ user315052: если метка времени должна быть указана пользователем, тогда нам нужно преобразовать ввод строки в тип 'time_t', поэтому я могу использовать' strtoull' для этой цели? Я имею в виду, как сканировать вход непосредственно в переменную 'time_t'? – Subbu