アプリ版:「スタンプのみでお礼する」機能のリリースについて

#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};の最初のファイルポインタのところは何を入れたらいいんでしょうか?

A 回答 (5件)

正直、構造体に FILEポインタ持たせる利点が分からないのだけど、


とりあえず NULL でいいんじゃないでしょうか、。

こんな感じ
sFILE fp={NULL,"output.txt",1100};
    • good
    • 0

個人的にはNULLよりは0かな。


NULLって結局はどっかでdefineされてる変数なのでね。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
からっぽでよかったんですね。
自分で確かめた限りでは、NULLでも0でも問題ないように感じたのでNULLでも入れとこうと思います。

お礼をまとめてしまって申しわけないのですが、回答してくださった方ありがとうございました。

お礼日時:2005/10/19 23:07

fp はファイルをオープンして初めて値が決まるのですから、初期化する時点ではひとまずNULLにしておいてよいかと思いますが。


その後、sFile.fp=fopen(....) です。
    • good
    • 0

構造体の初期化子には定数式しか使えませんので、移植性のある候補としては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++なら、コンストラクタで初期化するという手もあります。
    • good
    • 0

初期値として何が入っているのがいいかはプログラムによります。

他人に聞いてもわかりません。可能性としてあるのは、NULL、stdin、stdout、stderrでしょうか。
お書きの雰囲気だと、filenameで示されるファイルをオープンしてそのファイルポインタを入れるんでしょうか。その場合なら、未オープンの意味で、NULLかな。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!