構造体の中の構造体のアクセスの仕方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
abc->おーばー

構造体の中の構造体のアクセスの仕方

#1

投稿記事 by abc->おーばー » 9年前

こんにちは,今日は下記のプログラムについて伺いたいことがあります
manage.c

コード:

 #include<stdio.h>
 #include<stdlib.h>
 
 typedef struct{
  int month;
  int day;
  int day_of_week;
  }diary;
  
 typedef struct{
  char *name;
  diary day_d;
 }Library_d;
  
 FILE *fp;
 
 int main(void)
 {
  Library_d *data;
  if((fopen("Library","r"))==NULL)
   fprintf(stderr,"error\n");
  
 if((fscanf(fp,"%d %d %d",data->day_d.month,data->day_d.day,data->day_d.day_ow))==0)break;
 return 0;
}
 
このプログラムをコンパイルした時に
manage.c(27): warning C4477: 'fscanf' : 書式文字列 '%d' には、型 'int *' の引数が必要ですが、可変個引数 1 は型 'int' で す
manage.c(27): warning C4477: 'fscanf' : 書式文字列 '%d' には、型 'int *' の引数が必要ですが、可変個引数 2 は型 'int' で す
manage.c(27): warning C4477: 'fscanf' : 書式文字列 '%d' には、型 'int *' の引数が必要ですが、可変個引数 3 は型 'int' で す
とでて,コンパイラに言われたとおりに直そうとするもどのように引数を記述してあげればいいのかわかりません
いろいろ試した結果month,day,day_of_weekをメンバとして持つdaiaryを
typedef struct{
int *month;
int *day;
int *day_of_week;
}diary;
のように各メンバを元の型に対するポインタに変更するとコンパイルエラーはなくなったのですが、このような宣言をせずに実現したいのですどのようにすればいいのですか?

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: 構造体の中の構造体のアクセスの仕方

#2

投稿記事 by YuO » 9年前

普通にオブジェクトへのポインタを渡せば良いです。
つまり,
オブジェクト : day->day_d.month
オブジェクトへのポインタ : &day->day_d.month
です。

おーばー

Re: 構造体の中の構造体のアクセスの仕方

#3

投稿記事 by おーばー » 9年前

なんと..
解決です,単純なことだったのですね
助かりました!ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る