Суть задания в том, что нужно написать программу, которая будет выводить текущее время римскими символами. Попытался проверить работоспособность того, что уже написал - код компилируется нормально, но при запуске программы выдает сообщение «Ошибка сегментирования (сделан дамп памяти)». Ошибка, если я правильно понял, происходит в функции «convert_dec_to_roman», но в чем конкретно я ошибся, понять не могу, поэтому прошу помощи. Заранее спасибо.
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/** convert_dec_to_roman -- преобразует целое число в строковое представление
*
* Параметры:
* roman - строка для записи результата преобразования
* decimal - исходное целое
* n - ограничение на длину результата
* Возвращаемое значение:
* функция возвращает -1 при любой ошибке
*/
int convert_dec_to_roman (char *roman, unsigned int decimal, size_t n);
/** get_roman_date -- преобразует дату в строковое представление
*
* Параметры:
* romandate - строка для записи даты римскими числами
* now - структура времени
* n - ограничение на длину результата
* Возвращаемое значение:
* функция возвращает -1 при любой ошибке
*/
int get_roman_date (char *romandate, struct tm *now, size_t n);
int main (int argc, char *argv[])
{
struct tm *date;
int error_check = 0;
char romandate [100];
int size = sizeof (romandate);
error_check = get_roman_date (romandate, date, size);
if (error_check == 0) {
printf("%s\n", romandate);
} else {
exit (EXIT_FAILURE);
}
return EXIT_SUCCESS;
}
int convert_dec_to_roman (char *roman, unsigned int decimal, size_t n)
{
const int arabar[] = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
const char *romanar[] = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
int m = sizeof(arabar)/sizeof(int)-1;
int i, z;
i = 0;
z = m;
while(decimal > 0) {
if(decimal >= arabar[z]) {
roman[i++] = *romanar[z];
decimal -= arabar[z];
} else {
z--;
}
}
if(i > n) {
return -1;
} else {
return 0;
}
}
int get_roman_date (char *romandate, struct tm *now, size_t n)
{
int error_check = 0;
error_check = convert_dec_to_roman (romandate, now->tm_wday, n);
return error_check;
}