• ベストアンサー

ファイル名を複数個配列で確保したいときどうすればいいですか?

int i; FILE *fp[5]; //ここの宣言がわかりません char *(filename[5])={"1.txt","2.txt","3.txt","4.txt","5.txt}; for(i=0;i<5;i++) fp[i]=fopen(filename[i],"w"); のようなことをしたいのですが、ファイル名を複数個配列に格納するにはどのようにしたらいいんでしょうか? 回答お願いします。

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

const char * const filename[5] ={ "1.txt","2.txt","3.txt","4.txt","5.txt" }; でよいのでは?

moca12980
質問者

お礼

すいません。勘違いだったみたいで↓でうまくいきました。 typedef struct file{ FILE *fp; char *filename; }sFILE; sFILE fp[5]; char *name[5]={"1.txt","2.txt","3.txt","4.txt","5.txt"}; for(i=0;i<5;i++){ fp[i].fp=NULL; fp[i].filename=name[i]; }

moca12980
質問者

補足

回答ありがとうございます。 回答いただいた方法だと上手くいったんですが、質問には書いてなかったんですがファイルポインタを構造体にしていて、 typedef struct file{ FILE *fp; char *filename; }sFILE; sFILE fp[5]; const char * const name[5]={"1.txt","2.txt","3.txt","4.txt","5.txt"}; for(i=0;i<5;i++){ fp[i].fp=NULL; fp[i].filename=name[i];//← } としたかったんですが、構造体にすると//←の部分でエラーになってしまいます。 この場合どのようにしたらいいのでしょうか?

その他の回答 (1)

  • MasamiH
  • ベストアンサー率21% (13/61)
回答No.2

"オープンしたい"ファイル名(文字列)の配列とオープンしたファイルへのポインタの配列とは別物ですよ。 FILE *fp はオープンしたファイルへのポインタを格納しますからファイル名("1.txt")への文字列ポインタではありません。 ですので、 char filename[ ] = { "abc.txt", "def.txt"などなど }; FILE *fp[ 5]; という具合に二つの配列を宣言しておいて、 for ( ... ) fp[i] = fopen( filename[i], ..... )

関連するQ&A