• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語で文字列をポインタ名にしたい)

C言語で文字列をポインタ名にする方法

このQ&Aのポイント
  • C言語で文字列をポインタ名にする方法について教えてください。
  • 具体的には、xの配列の個々の要素を計算回数による計算結果の推移をファイルに出力したいです。
  • ファイル名は「test_x_1.data」、「test_x_2.data」、…「test_x_50.data」となるようにしたいです。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

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); } }

Q_stagioni
質問者

お礼

なるほど。ポインタ自体を配列にすればいいわけですね。シンプルで参考になりました。 注意点まで挙げていただき、ありがとうございます! ポインタ数の総和とFOPEN_MAXの数を書き出して問題ないか確認することにします。

その他の回答 (3)

  • noyuo
  • ベストアンサー率39% (33/84)
回答No.4

No.3です。 他になさそう。・・・ではありませんでした。 もう1つの中間ファイルを使う方法 あるいは、CAL*ELEの2次元配列を使う方法 もありました。 中間ファイルを使う場合は、計算結果の行頭に、nの値を追加したデータ行を ファイルに一旦全て出力して、全ての計算が終わったら、 再度読み込んで振り分けるという方法はどうですか? (もちろん、一致するnのみを抽出するネストしたELE回のループによって行います)

Q_stagioni
質問者

お礼

一度書きこんでから再度読み込む発想はありませんでした。 参考にさせて頂きます。ありがとうございました。

  • noyuo
  • ベストアンサー率39% (33/84)
回答No.3

確かに、遅くなるプログラムのようですね。 ファイルのオープンクローズをCAL*ELE回行うようになっている点を 見直してはどうでしょうか? つまり、ELE回の大きいループの中で、CAL回ループするように組み替えれば、 オープンクローズはCAL回で済むと思います。 (オープンモードのオプションの判定も無くなります) 質問のプログラムの部分しか見てませんので、何かこうする意味があれば 仕方ないですが、他の方のおっしゃるようにするしかありません。

  • Interest
  • ベストアンサー率31% (207/659)
回答No.2

> C言語で文字列をポインタ名にする方法はありますか? 残念ながら、ありません。 しかし、ファイル名が連番で管理されているのであれば、ファイルポインタの配列を用意するという手は有効だと思います。 例えば、  FILE *fp[ELE]; として、  if((fp[i] = fopen(buf[i],"w"))==NULL){ とするとか。

Q_stagioni
質問者

お礼

順番の関係でNo.1の方をベストアンサーにいたしましたが、 C言語では文字列をポインタ名にすることができないという点で、参考になりました。 ありがとうございました!

関連するQ&A