• ベストアンサー

文字の後の*の意味

C言語初心者です。 あるプログラムの中で FILE* fopenread(const char* filename)・・・・(A) {FILE* file = fopen(filename, "r");・・・・・(B) if (file==NULL) {fprintf(stderr, "cannot open %s\n", filename); exit(-2);}・・・・(C) return file; } という関数があるのですが これはいったい何をしているのかがわかりません。 1. (A)は「FILE* fopenreadという名前の関数を定義し、 その引数が定数でchar型のfilenameという名前」ということでしょうか?たとえば適当な文字pを用いて「*p」のような表記ならば 「ポインタを使いますってことを言ってるんだな」ってことはわかるのですがここでは文字の後に*がついてます。これは何なのでしょうか?? 2.(B)はfilenameという名前のファイルを読み込みを目的として開く。FILE* file という変数に入れる。 3.(C)ファイルの中身がない場合は、cannot open と標準エラー出力に表示する。exit(-2);っていうのは何でしょうか??? 基本的なことばかりかもしれませんが自分なりに調べてもよくわからなかったので、 詳しい方、アドバイスしていただければと思います。 よろしくお願いします。

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

  • ベストアンサー
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

1. const char* filename と const char *filename は同じ意味です 2. fopen() のマニュアルを参照して下さい。 3. ファイルの中身がない場合に fopen() が失敗するわけではありません。 こちらもマニュアル参照。 exit(-2) の意図は不明です。 関数内でファイルのオープンに失敗すると、プログラム自体が終了してしまいます。 普通そんなことはしません。 >自分なりに調べてもよくわからなかったので、 ついでにどう調べたのかも補足に書くとよいでしょう。

lordofroom
質問者

補足

ありがとうございます! 1.はそうだったのですね。本当に助かりました。ここが一番わからなかったので・・・。 調べたのは"http://www9.plala.or.jp/sgwr-t/"で探しました。 17章のファイル入出力のところが参考になりました。 基本的にこのサイトとGoogle検索によって調べています。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.3

>#2さん >> 関数内でファイルのオープンに失敗すると、プログラム自体が終了してしまいます。 > > そんなことない。 いえいえ。 質問者さんのソースではオープン失敗時にexit()を呼び出していますので、 exit()の機能どおり、プログラムが終了します。 別のexit()の話をされていますか?

lordofroom
質問者

お礼

exitってよくわからないです(汗)。

回答No.2

> 関数内でファイルのオープンに失敗すると、プログラム自体が終了してしまいます。  そんなことない。 > 普通そんなことはしません。  返り値で失敗を知らせるか、"exit"するのが普通。  

lordofroom
質問者

お礼

それは知りませんでした。ありがとうございます!!

関連するQ&A