ページ 11

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

Posted: 2016年8月01日(月) 00:28
by abc->おーばー
こんにちは,今日は下記のプログラムについて伺いたいことがあります
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;
のように各メンバを元の型に対するポインタに変更するとコンパイルエラーはなくなったのですが、このような宣言をせずに実現したいのですどのようにすればいいのですか?

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

Posted: 2016年8月01日(月) 00:38
by YuO
普通にオブジェクトへのポインタを渡せば良いです。
つまり,
オブジェクト : day->day_d.month
オブジェクトへのポインタ : &day->day_d.month
です。

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

Posted: 2016年8月01日(月) 00:43
by おーばー
なんと..
解決です,単純なことだったのですね
助かりました!ありがとうございます。