- ベストアンサー
fgetc( )の戻り値はなぜ整数??
fgetc( )は戻り値が整数ですが、あれは何を指しているのでしょう? ポインタに代入すれば値を表示できますが・・・。 EOFを返すために整数なのはわかるのですが・・。 アドレスの値ではないですし、デバックして値をみると、二桁の整数でした。 文字コードかなにかなんですかね・・・。 知っているかたいたら教えてください! よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
回答はすでに出ていますが、補足ということで。。。 要するに、C には「文字」を表す型がないということなんです。 char型は、1バイト長の整数型だと思ってください。 いわゆる半角文字をあらわすのに、アスキーコードでは 0x00~0x7F であらわすことができますので、C ではそれをあらわすのに十分な 1バイトを char型として採用したということです。 しかも、char型の変数にはアスキーコードが数値としてダイレクトに入るので、以下のような処理も可能になっちゃうと。。。 ------------------------------------------------- char hoge; hoge = 'a'; hoge += 10; // hoge は 'k' になる。 ------------------------------------------------- また、以下の処理はすべて同じことのなります。 ------------------------------------------------- char piyo; piyo = 'a'; piyo = 0x61; piyo = 0x97; ------------------------------------------------- …あと、注意が必要なのは、こんな言語は珍しいということですね。 # C って、いろんな意味で手抜きな言語ですからね。 ふつうの言語は「文字型」の変数には「文字」しか代入できません。 ついでに、C で 1文字の「文字」用に変数を用意する場合、int型にしたほうがいろんな意味で良いと思います。 C の標準関数も、1文字を扱う関数は int型を引数にとったり戻り値にしていますよね。 # そもそも、int型より小さいサイズは、実行時にはすべて int型のサイズに変換されてしまいますし。 # このあたりの話は、「汎整数拡張」でご自分で調べてみてください。 (←あ、逃げた。。。) じゃあ、「char型の存在意義は?」という話になりますが、文字列 (char型配列) 用に用意されていると思ってもらって良いのではないかな。 「補足」といいながら長くなってしまいましたが、まとめると以下のような感じかな。 ◆「文字」は int型であらわす (もちろん char型であらわすことも可能)。 ◆「文字列」は char型の配列であらわす。 ご参考まで。
その他の回答 (2)
- Agamemnon
- ベストアンサー率20% (25/125)
ご存じかとは思いますが、コンピュータは全て数値で動いてます。 文字に見えるものも全て数値なのです。 fprint()関数なども、数値を文字列として表現するだけで、 内部では数値として扱っているわけです。 char 型の変数といっても中身はタダの整数値ですしね。 char 型でループのカウンタを作って動かしてみると分かります。
お礼
>ご存じかとは思いますが、コンピュータは全て数値で動いてます。 >文字に見えるものも全て数値なのです。 ですね。 処理を行うまでのコンピュータに渡される値は1,0までに なるんですよね。 あんまり型に惑わされないようにします。 ありがとうございました。
- dsuekichi
- ベストアンサー率64% (171/265)
> fgetc( )は戻り値が整数ですが、あれは何を指しているのでしょう? > 文字コードかなにかなんですかね・・・ 正解。
お礼
>正解。 やっぱりですか・・・。 正確なことが本にもサイトにも書いてなかったので。 ありがとうございました。
お礼
やはり、コンピュータはint型が一番処理しやすいんでしょうね。 これから、アスキーコードの課題をやるのでいい勉強になりました。 文字は数字で変えられるんですね驚きました。 どうも細かいところまでありがとうございました。