在C语言中将十进制转换为罗马-如何从函数返回字符串?

在C语言中将十进制转换为罗马-如何从函数返回字符串?,c,string,function,return,decimal,C,String,Function,Return,Decimal,将十进制数转换为罗马数的简单函数,但如何从函数返回此字符串?我尝试了这个解决方案,但我的程序崩溃了 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 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]="\0";

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

return buff;

}

谢谢你的帮助

buff
不是一个单独的
char
;这是它们的一系列。因此,您必须相应地声明函数的返回类型

但是你有一个问题,字符串是你函数的局部;当你回来时,它(概念上)“消失”

您大致有两种选择:

  • buff
    作为参数传递。(在这种情况下,您不需要将其退回。)
  • 使用动态分配(
    malloc
    )为
    buff
    分配空间

  • 最简单的方法是在
    main
    中声明缓冲区,并将其传递给函数。所以函数签名是void-roman(int-number,char-buff[100])。顺便说一句,你想知道
    number<4000
    另一个选择是使
    buff
    成为一个静态数组。
    printf("\nAfter change: %s",roman(decimal_number));