• ベストアンサー

関数の戻り値について

初心者です。 char *inttochar(int numb); int main() { cout << inttochar(num); } char *inttochar(int numb) { char str[20]; ..... return str; } というように、「numb」に数値を代入して、 数字の文字列を返したいのですが、 (多分)アドレスしか表示がされないのです。 どうすればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

char *inttochar(int numb) { char str[20]; ..... return str; } の str は inttochar() の中でしか存在しない変数です。inttochar() から main() に戻ったときには消えてなくなってます。 なので、 ・inttochar() の中で malloc でメモリを割り当てる ・char *inttochar(int numb, char *str) として、呼び出し側で用意しておく。 とか。

noname#6117
質問者

お礼

ありがとうございました。 static char str[20]; というように、宣言しましたら、 無事にエラーがなく、きちんと表示されました。 mallocにも、今度挑戦してみようと思います。 本当にありがとうございます。

その他の回答 (1)

  • mi-si
  • ベストアンサー率35% (200/567)
回答No.2

呼び出した関数内部で確保したメモリはスタックに確保されるので、元のルーチンに戻ってきた時に中身が破壊される可能性があります。よって動作は予期できません。呼び出すルーチン側で配列を確保する必要があります。(この場合、関数内部でmallocでメモリを確保する方法はメモリリークの原因になるので薦めません。) と言うわけで char *inttochar(int numb,char *str){ ... return str } としないと駄目でしょう。

noname#6117
質問者

お礼

ありがとうございます。 常駐させないといけないことに気づいたので、 static宣言をいたしました。 よろしいでしょうか?

関連するQ&A

専門家に質問してみよう