- ベストアンサー
C言語で文字列をポインタ名にする方法
- C言語で文字列をポインタ名にする方法について教えてください。
- 具体的には、xの配列の個々の要素を計算回数による計算結果の推移をファイルに出力したいです。
- ファイル名は「test_x_1.data」、「test_x_2.data」、…「test_x_50.data」となるようにしたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
FILE* も配列にしてファイル名作成時に一緒に開いたらよさそうですがfopenは同時に開ける数に制限があるので注意しないといけません FOPEN_MAX個は開けるのが保証されています FILE* fp[ELE]; /*「test_x_数字.data」という文字列の出力*/ for(i=0;i<ELE;i++){ sprintf(buf[i],"%s-I%d%s",filename,i,fileext); if((fp[i] = fopen(buf[i],"w"))==NULL){ printf("The program can't create a file. : buf[i] \n"); exit(1); } }
その他の回答 (3)
- noyuo
- ベストアンサー率39% (33/84)
No.3です。 他になさそう。・・・ではありませんでした。 もう1つの中間ファイルを使う方法 あるいは、CAL*ELEの2次元配列を使う方法 もありました。 中間ファイルを使う場合は、計算結果の行頭に、nの値を追加したデータ行を ファイルに一旦全て出力して、全ての計算が終わったら、 再度読み込んで振り分けるという方法はどうですか? (もちろん、一致するnのみを抽出するネストしたELE回のループによって行います)
お礼
一度書きこんでから再度読み込む発想はありませんでした。 参考にさせて頂きます。ありがとうございました。
- noyuo
- ベストアンサー率39% (33/84)
確かに、遅くなるプログラムのようですね。 ファイルのオープンクローズをCAL*ELE回行うようになっている点を 見直してはどうでしょうか? つまり、ELE回の大きいループの中で、CAL回ループするように組み替えれば、 オープンクローズはCAL回で済むと思います。 (オープンモードのオプションの判定も無くなります) 質問のプログラムの部分しか見てませんので、何かこうする意味があれば 仕方ないですが、他の方のおっしゃるようにするしかありません。
- Interest
- ベストアンサー率31% (207/659)
> C言語で文字列をポインタ名にする方法はありますか? 残念ながら、ありません。 しかし、ファイル名が連番で管理されているのであれば、ファイルポインタの配列を用意するという手は有効だと思います。 例えば、 FILE *fp[ELE]; として、 if((fp[i] = fopen(buf[i],"w"))==NULL){ とするとか。
お礼
順番の関係でNo.1の方をベストアンサーにいたしましたが、 C言語では文字列をポインタ名にすることができないという点で、参考になりました。 ありがとうございました!
お礼
なるほど。ポインタ自体を配列にすればいいわけですね。シンプルで参考になりました。 注意点まで挙げていただき、ありがとうございます! ポインタ数の総和とFOPEN_MAXの数を書き出して問題ないか確認することにします。