- ベストアンサー
構造体のメンバにファイルポインタがあるときの初期化について
#include<stdio.h> typedef struct file{ FILE *fp; char filename[255]; int flag; }sFILE; main() { sFILE fp={ ,"output.txt",1100}; } のように書きたいんですが、sFILE fp={ ,"output.txt",1100};の最初のファイルポインタのところは何を入れたらいいんでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
正直、構造体に FILEポインタ持たせる利点が分からないのだけど、 とりあえず NULL でいいんじゃないでしょうか、。 こんな感じ sFILE fp={NULL,"output.txt",1100};
その他の回答 (4)
- goma_2000
- ベストアンサー率48% (62/129)
個人的にはNULLよりは0かな。 NULLって結局はどっかでdefineされてる変数なのでね。
- MasamiH
- ベストアンサー率21% (13/61)
fp はファイルをオープンして初めて値が決まるのですから、初期化する時点ではひとまずNULLにしておいてよいかと思いますが。 その後、sFile.fp=fopen(....) です。
- jacta
- ベストアンサー率26% (845/3158)
構造体の初期化子には定数式しか使えませんので、移植性のある候補としてはNULLだけかと思います。 stdin, stdout, stderrも、処理系によってはアドレス定数式に展開されますが、必ずしもそうなるとは限りません。 初期化子による初期化より、むしろ関数による初期化を行う方がよいかと思います。 こんな感じです。 sFILE open_file(const char* filename, int flag) { sFILE file = {NULL}; strncpy(file.filename, filename, sizeof(file.filename)-1); file.flag = flag; file.fp = fopen(file.filename, "r"); return file; } int main(void) { sFILE fp = open_file("output.txt", 1100); ... return 0; } C++なら、コンストラクタで初期化するという手もあります。
- notnot
- ベストアンサー率47% (4900/10358)
初期値として何が入っているのがいいかはプログラムによります。他人に聞いてもわかりません。可能性としてあるのは、NULL、stdin、stdout、stderrでしょうか。 お書きの雰囲気だと、filenameで示されるファイルをオープンしてそのファイルポインタを入れるんでしょうか。その場合なら、未オープンの意味で、NULLかな。
お礼
回答ありがとうございました。 からっぽでよかったんですね。 自分で確かめた限りでは、NULLでも0でも問題ないように感じたのでNULLでも入れとこうと思います。 お礼をまとめてしまって申しわけないのですが、回答してくださった方ありがとうございました。