- ベストアンサー
ファイル名を複数個配列で確保したいときどうすればいいですか?
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"); のようなことをしたいのですが、ファイル名を複数個配列に格納するにはどのようにしたらいいんでしょうか? 回答お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
const char * const filename[5] ={ "1.txt","2.txt","3.txt","4.txt","5.txt" }; でよいのでは?
その他の回答 (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], ..... )
お礼
すいません。勘違いだったみたいで↓でうまくいきました。 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]; }
補足
回答ありがとうございます。 回答いただいた方法だと上手くいったんですが、質問には書いてなかったんですがファイルポインタを構造体にしていて、 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];//← } としたかったんですが、構造体にすると//←の部分でエラーになってしまいます。 この場合どのようにしたらいいのでしょうか?