#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 варианта:
- Передать
buff
в качестве параметра. (В этом случае вам не нужно будет ее возвращать.) - Используйте dynamic allocation (
malloc
) для выделения пространства дляbuff
.
Комментарии:
1. Другой вариант — создать
buff
статический массив.