【问题标题】:Convert decimal to roman in C - how to return string from function?在C中将十进制转换为罗马 - 如何从函数返回字符串?
【发布时间】:2017-02-26 20:31:50
【问题描述】:

将十进制数字转换为罗马数字的简单函数,但是如何从函数中返回此字符串?我尝试了这个解决方案,但我的程序崩溃了。

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;

}

主要我得到了:

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

感谢您的帮助。

【问题讨论】:

  • 最简单的做法是在main 中声明缓冲区,并将其传递给函数。所以函数签名是void roman(int number, char buff[100])
  • 顺便说一句,你想number &lt; 4000

标签: c string function return decimal


【解决方案1】:

buff 不是单个char;它是它们的数组。所以你必须相应地声明你的函数的返回类型。

但是你的问题是字符串对于你的函数来说是本地的;当您返回时,它(概念上)“消失”。

您的大致 2 个选择是:

  1. buff 作为参数传递。 (在这种情况下,您无需退货。)
  2. 使用动态分配(malloc)为buff分配空间。

【讨论】:

  • 另一种选择是将buff设为静态数组。
猜你喜欢
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 2018-01-03
  • 1970-01-01
相关资源
最近更新 更多