2016-10-17 13 views
1

10進数をローマンに変換する単純な関数ですが、関数からこの文字列を返すにはどうすればよいですか?私はこの解決策を試みたが、私のプログラムはクラッシュする。メインでCで10進数をローマンに変換する - 関数から文字列を返す方法は?

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; 

} 

私が得た:助けを

​​

感謝を。

+0

最も簡単なことは、バッファを 'main'に宣言し、それを関数に渡すことです。したがって、関数の署名は 'void roman(int number、char buff [100])'です。 – user3386109

+0

ところで、 'number <4000'と思ってください。 – chux

答えて

1

buffは単一ではありませんchar;それはそれらの配列です。したがって、関数の戻り値の型をそれに応じて宣言する必要があります。

しかし、文字列が関数のローカルであるという問題があります。あなたが戻ったときには(概念的に)「離れる」。

あなたのおおよそ2の選択肢は以下のとおりです。パラメータとして

  1. パスbuff
  2. buffのスペースを割り当てるには、動的割り当て(malloc)を使用してください。
+0

もう一つの選択肢は' buff'を静的配列にすることです。 – PaulMcKenzie

+0

皆さん、ありがとうございました。 – NeviJ

関連する問題