• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:別ファイルの構造体の値を読み込む、変えるには?2)

別ファイルの構造体の値を読み込む、変えるには?2

このQ&Aのポイント
  • AとBのファイルに同じ構造体のデータを読み込んだとして、どのように書けば構造体のデータをファイルAで変えたものをBのファイルからも値が変わっていたり、Bのファイルで変えた値をAのファイルで読み込んだり、することができますか?
  • kya_dataという構造体のデータは、ファイルAとファイルBで同じ構造体を用いて定義されています。AとBのファイルでこの構造体の値をやり取りする方法はありますか?
  • ファイルAで変更した構造体の値をファイルBからも反映させたり、ファイルBで変更した構造体の値をファイルAからも読み込んだりする方法を教えてください。

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

  • ベストアンサー
noname#208507
noname#208507
回答No.2

「ファイル」がソースファイルの意味だとして、 ・構造体の宣言をヘッダファイルに書く。 ・そのヘッダを構造体を読み書きするソースにインクルードする。 ・ソースファイルA,Bのどれかに構造体を定義、初期化する。 例えば下のような3つのファイルに分割してコンパイルすればよいでしょう。 (それと char *name[2]; では2つの文字列ではなく、ポインタの配列になってしまいますよ) /* --- ヘッダファイル (KyaData.h) --- */ struct KyaData { /* KyaData構造体の宣言 */  char name[2][16];  double d_data[2];  int i_data[4];  double s_data[2];  int state[2][3];  int regi[5]; }; /* kya_data配列のextern宣言 */ extern struct KyaData kya_data[2]; /* 関数overwriteのextern宣言 */ extern void overwrite(void); /* --- ソースファイルA --- */ #include <stdio.h> #include "KyaData.h" /* ヘッダファイルのインクルード */ struct KyaData kya_data[2] = { /* kya_data配列の定義 */  {   { "奈美", "爆弾" },   { 43.0000, 54.0000 },   { 50, 50, 50, 50 },   { 0.100, 0.100 },   { { 0, 0, 0 } , { 0, 0, 0 } },   { 100, 0, 0, 0, 0 }  },  {   { "由美", "湖" },   { 23.0000, 76.0000 },   { 50, 50, 50, 50 },   { 0.100, 0.100 },   { { 0, 0, 0 }, { 0, 0, 0 } },   { 0, 0, 0, 0, 100 }  } }; int main(void) {  printf("%s, %f\n", kya_data[0].name[0], kya_data[0].d_data[0]);  overwrite(); /* kya_data配列の中身を変更 */  printf("%s, %f\n", kya_data[0].name[0], kya_data[0].d_data[0]);  return 0; } /* --- ソースファイルB --- */ #include "KyaData.h" /* ヘッダファイルのインクルード */ void overwrite(void) /* 関数overwriteの定義 */ {  kya_data[0].d_data[0] = 11.5; }

mana5867
質問者

補足

ありがとうございます。 変えることができました。 ただ質問の内容が足らなかったのでそこら辺は別に聞いてみますね

その他の回答 (1)

回答No.1

- ファイルにデーターを読み込む - データーをファイルXで変える の意味がわからんです。 ここでいうところの「ファイル」ってなんですか?

mana5867
質問者

補足

返答遅くなりました ソースファイルのことですね

関連するQ&A

専門家に質問してみよう