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

このQ&Aのポイント
  • 別のファイルに構造体のデータを読み込んだり、値を変更したりする方法を教えてください。
  • 静的な構造体の配列を使用してデータを格納しています。
  • ハッシュタグ: #構造体 #データ読み込み #値変更 #配列 #静的
回答を見る
  • ベストアンサー

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

別のファイルに下の構造体があったとして、どのように書けば構造体のデーターを読み込んだり、値を変えたり出来ますか? static struct{ char *name[2]; double d_data[2]; int i_data[4]; double s_data[2]; int state[2][3]; int regi[5]; }kya_data[2]={ {   { "奈美" , "爆弾" },   {    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   } } };

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

  • ベストアンサー
  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.1

構造体の宣言と初期化を分離して、宣言をヘッダーファイルにする。 データを読みたいソースはそのヘッダーをインクルードし、配列をexternとする。

mana5867
質問者

お礼

申し訳ありません 聞き方が足りなかったですね その方法だと構造体に入ってるデーターを基にしてそれぞれ別ファイルごとに値を変えられるのですが、こっちのファイルでデーターを変えたものが別ファイルに反映されるにはどうしたらいいか? っという質問内容が抜けてました申し訳ありません

関連するQ&A

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

    以前質問の内容がたらずにもう一度同じ質問をすることをお許しください。 AとBのファイルに同じ構造体のデーターを読み込んだとして、どのように書けば構造体のデーターをファイルAで変えたものをBのファイルからも値が変わっていたり、Bのファイルで変えた値をAのファイルで読み込んだり、することができますか? static struct{ char *name[2]; double d_data[2]; int i_data[4]; double s_data[2]; int state[2][3]; int regi[5]; }kya_data[2]={ {   { "奈美" , "爆弾" },   {    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   } } };

  • 構造体について

    凄く初歩的な質問で申し訳ありませんが… 入門書の構造体のところで 以下のようなプログラムの例がありました。 #include <stdio.h> struct seiseki { /* 構造体の宣言 */ int no; char name[20]; double average; }; int main(void) { int i; struct seiseki seito1, seito2[20]; /* 構造体変数と構造体配列の宣言 */ >char name[20] というのは、NAMEの領域を20文字 確保すると言うことですよね? >struct seiseki seito1, seito2[20] ここの箇所が分からないのですが seito2[20]の20というのは どうして20なのですか? NAMEだけではないので もっと大きな数字になるような気がするのですが… またseito1の方は どうして数字が何もないんですか? 考え違いをしているところを ご指摘して頂ければ幸いです。

  • 構造体で・・・・

    構造体は配列を使用せずメモリ領域を獲得する関数を使用すること、 *構造体内部のメンバ名には配列を用いて良い。  という、条件があるのですが場合はどのようにすればよろしいでしょうか? どなたか教えてください。 構造体は以下のようになってます。 /*構造体の定義*/ struct seiseki{   char name[20];   int eig;   int suu;   int kok;   char rank[3]; };

  • C言語の文字列を含んだ構造体

    下記のサイトに構造体のことが書かれています。 http://www.isl.ne.jp/pcsp/beginC/C_Language_14.html その中の (3)構造体の初期化 の記述で  //構造体の型宣言  struct student{   int no; // 学籍番号   char name[256]; // 氏名   int year; // 学年   char student_class[256]; // クラス  }; と書かれています。 次の(4)構造体のデータ参照では、  //構造体の型宣言  struct OLD{   int no; //番号   char *name; //名前   int s_year; //年   char s_class; //クラス  }; と書かれています。 ここで質問です。 前者の名前は char name[256] ですが、 後者の名前は char *name になっています。 name[256] と *name では何が違うのでしょうか? どういうときに使い分けるのでしょうか?

  • ファイルから読みこんで構造体に格納する、

    shohinというファイルに RX-100 odango_tsumeawase 3000という のが 五行ならんでいるのですが、 これを読み込んで struct shohin{ char code[10]: char name[40]; int price; } にファイルから読みこんで構造体配列に 格納したいのですが、構造体配列に格納する やりかたがわかりません。 構造体配列は struct shohin list[];というのを宣言しています。 ファイルから一行読み込んで fprintf()を使おうと思うのですが、 それはできますか? メンバ毎に格納したいのですが、 それがわかりません お願いします。

  • 異なる構造体のデータのコピー

    (1)で受け取った構造体のメンバのデータを (2)の構造体のメンバにコピーしたいと考えています。 (1) typedef struct _recvData{ int data01; int data02; char data03; char data 04; char data05; char data 06; char data07; char data08; char data09; char data10; char array01[16]; char array02[16]; } recvData; (2) typedef struct _sendData{ int header; int data01; int data02; char data03; char data 04; char data05; char data 06; char data07; char data08; char data09; char data10; int array01[4]; int array02[4]; } sendData; そこで2点ほどおしえていただきたく、お願い致します。 (1)構造体が微妙に異なるため、各メンバ変数に値をそれぞれ代入していくしか方法がないのでしょうか? (2)array01, array02はデータの型が異なる場合、データのコピーはどのようにしたらよいでしょうか?

  • 構造体の変数の値を、動的に取得する方法を教えてください

    C言語で、構造体の変数の値を取得したいのですが、その際、 他の変数に格納してある文字列を元に動的に行いたいのですが、可能でしょうか? イメージとしては、 struct Entry{ char name[20]; char address[80]; char email[40]; }; struct Entry data; strcpy(data.name, "Taro"); strcpy(data.address, "Tokyo"); strcpy(data.email, "taro@taro"); char var_name[20]; strcpy(var_name, "email"); printf("%s", data.var_name); ↑この行の構造体の変数へのアクセス方法が間違っているのはわかっていますが、このような時に「taro@taro」と出力させたいのです。 var_nameの値を「name, address, email」に換える事により「Taro, Tokyo, taro@taro」と出力を切り換えたいと思っています。 普段は他の言語をよく使用しており、そちらではこの手法を時々使っていたのですが、C言語でも出来ないものかと思っております。 よろしくお願いします。

  • 構造体のポインタにNULLが入らない

    typedef struct tag{ int number; char name[10]; struct tag *next; }DATA; という構造体があって、 DATA *p; と宣言し、 p->next == NULL; とすることはできないんですか? セグメンテーション違反になってしまうのですが。 pが指すnextにNULLを入れるにはどうしたらいいのでしょうか?

  • ファイルの読み込みと構造体

    こんばんは☆ Cのプログラミングに困っています(>_<) テキストファイル(meibo.txt) 田中 32 公務員 佐藤 20 学生 というファイルを読み込んで、構造体に入れて表示するには どうしたらよいでしょうか? struct meibo{     char name[20];     int age;     char job[20]; }list[3]; としたあとにどのように入れたらよいかがわかりません… わかる方教えてくださいm(_ _)m

  • 構造体の静的な初期化

    構造体の静的な初期化で、初期化が書かれていないメンバーは、 どうなるのでしょうか。。? たとえば・・・ // 構造体の宣言 strcut MY_STRUCT {    int data1 ;    int data2 ;    int data3 ;    int data4 ; } ; // 変数宣言&初期化 static strcut MY_STRUCT st = {    .data1 = 100,    .data3 = 300 } ; ネットで調べると、 初期化で指示されていないメンバーは0に初期化される、 という記述も一つだけ見つけたのですが・・・これはC言語(C99)の仕様でしょうか? それともコンパイラ依存の仕様でしょうか?

専門家に質問してみよう