Преобразовать десятичную дробь в римскую в C — как вернуть строку из функции?

#c #string #function #return #decimal

#c #строка #функция #Возврат #десятичная

Вопрос:

Простая функция для преобразования десятичных чисел в римскую, но как я могу вернуть эту строку из функции? Я попробовал это решение, но моя программа вылетает.

 char roman(int number)
{

char ROMAN[][3] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };

int NUM[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; 

int i;

char buff[100]="";

for(i = 0; number > 0 amp;amp; number < 3999; i  )
  while(number/NUM[i]){
      strcat(buff,ROMAN[i]);
      number -= NUM[i];
  }

return buff;

}
  

В основном я получил:

 printf("nAfter change: %s",roman(decimal_number));
  

Спасибо за помощь.

Комментарии:

1. Самое простое, что можно сделать, это объявить буфер main и передать его функции. Итак, сигнатура функции void roman(int number, char buff[100]) .

2. Кстати, думаю, вы хотите number < 4000

Ответ №1:

buff не является единицей char ; это их массив. Таким образом, вам нужно будет соответствующим образом объявить возвращаемый тип вашей функции.

Но тогда у вас возникает проблема, заключающаяся в том, что строка является локальной для вашей функции; она (концептуально) «исчезает» при возврате.

Ваши примерно 2 варианта:

  1. Передать buff в качестве параметра. (В этом случае вам не нужно будет ее возвращать.)
  2. Используйте dynamic allocation ( malloc ) для выделения пространства для buff .

Комментарии:

1. Другой вариант — создать buff статический массив.