int型char型間の型変換について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大学生

int型char型間の型変換について

#1

投稿記事 by 大学生 » 15年前

四則演算を実行する電卓機能を持ったプログラムを作成しています。
その過程で、計算結果の値(int型)をスタック(char型で宣言)に格納する必要性が出てきました。
char型のスタックに格納するためには、計算結果の値をchar型に変換しなくてはなりません。
しかし、キャスト(このように:(char)answer)すると、容量(?)がchar型<int型のためか値が正しく保持されませんでした。
また、itoa関数というものも使ってみましたが、使用しているOSがLinuxのため、itoaが定義されてないとのエラーが表示されうまく機能しません。
他にint型からchar型へ型変換する方法はありますか?
やはりchar型<int型の関係から不可能なのでしょうか・・・。

回答お願いします。
コンパイラはgcc使用です。

y

Re:int型char型間の型変換について

#2

投稿記事 by y » 15年前

整数値の計算をするだけならば、スタックをchar型で作る意味はありません。
配列でスタックを作っているのか、それともmallocで作っているのかは分かりませんが、
素直にint型で作ることをおすすめします。

たかぎ

Re:int型char型間の型変換について

#3

投稿記事 by たかぎ » 15年前

> 他にint型からchar型へ型変換する方法はありますか?

結局どうしたいのかがわかりませんが、普通はキャストしかありません。
情報が失われるのが嫌なら、sizoef(int)個のchar変数または配列を使うしかないでしょう。

やんち

Re:int型char型間の型変換について

#4

投稿記事 by やんち » 15年前

発想を逆転して、char 型のスタックの方を int 型にみたてるとどうでしょう。

hoge

Re:int型char型間の型変換について

#5

投稿記事 by hoge » 15年前

256以上の値は char型のスタックには入りません。
多くの場合、128以上でもオーバーフローするでしょう。
そのスタックを使う限り、キャストしようが変換しようが同じです。

もしそれでもやりたいのならば、intをchar配列にエンコード、デコードしてpush pop するしか無いでしょう。

白い時空

Re:int型char型間の型変換について

#6

投稿記事 by 白い時空 » 15年前

すいません。ひとつ気になったんですが、itoa関数はint型をchar *型(文字列)に変換します。
もしかして、123→"123"のように数値を文字列に変換したいんですか?

box

Re:int型char型間の型変換について

#7

投稿記事 by box » 15年前

> その過程で、計算結果の値(int型)をスタック(char型で宣言)に格納する必要性が出てきました。

そうする必要がある理由がわかりません。

大学生

Re:int型char型間の型変換について

#8

投稿記事 by 大学生 » 15年前

皆様ご回答ありがとう御座います。
int型のスタックを用意してやってみることにします。

白い時空様、
はい、数値→文字列、です。
すみません、私の親記事の書き方だと数値→文字1文字となってしまいますね・・・。

box様、
括弧付き演算式(例:12*(3+15))の実現のためです。
括弧内を計算してその結果をスタックにプッシュしたくて。
説明不足申し訳ありません。

白い時空

Re:int型char型間の型変換について

#9

投稿記事 by 白い時空 » 15年前

数値→文字1文字はおかしいと思ったらやはりそうでしたか。
数値を文字列にするのは簡単ですよ。sprintf関数を使ってください。

たとえば文字列strに "12*(3+15)" を入れたいなら
sprintf(str,"%d*(%d+%d)",12,3,15);
とすればOKです。

第1引数に文字列をいれ、第2引数からはprintf関数と同じように扱ってください。
結果を画面に出力するのではなく、文字列に入れてくれます。

大学生

Re:int型char型間の型変換について

#10

投稿記事 by 大学生 » 15年前

白い時空様、
ありがとうございます!!
sprintf関数を使ったところ上手く数値→文字列に出来ました。
これでchar型スタックのままプログラムを書けそうです。

助かりました、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る