- ベストアンサー
別ファイルの構造体の値を読み込む、変えるには?2
- AとBのファイルに同じ構造体のデータを読み込んだとして、どのように書けば構造体のデータをファイルAで変えたものをBのファイルからも値が変わっていたり、Bのファイルで変えた値をAのファイルで読み込んだり、することができますか?
- kya_dataという構造体のデータは、ファイルAとファイルBで同じ構造体を用いて定義されています。AとBのファイルでこの構造体の値をやり取りする方法はありますか?
- ファイルAで変更した構造体の値をファイルBからも反映させたり、ファイルBで変更した構造体の値をファイルAからも読み込んだりする方法を教えてください。
- みんなの回答 (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; }
その他の回答 (1)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
- ファイルにデーターを読み込む - データーをファイルXで変える の意味がわからんです。 ここでいうところの「ファイル」ってなんですか?
補足
返答遅くなりました ソースファイルのことですね
補足
ありがとうございます。 変えることができました。 ただ質問の内容が足らなかったのでそこら辺は別に聞いてみますね