2012-03-31 12 views
1

他の構造から構造体の配列にアクセスするにはどうすればよいですか? all_albums_pからtrack_titlesにアクセスしたいと思います。私tried all_albums_p[i] -> all_tracks_p[j].tracks_titleそれは別の構造の構造体の配列にアクセスするには?

struct tracks_{ 
    char *tracks_title; 
    int playlist_hits; 
    }; 

struct album_ { 
    int num_tracks; 
    struct tracks_ tracks; 
    }; 

typedef struct album_ album; 
typedef struct tracks_ tracks; 

album *all_albums_p = (album *)malloc(sizeof(album)*number_of_album); 

fscanf(album_file,"%d", &all_albums_p[j].num_tracks); 

tracks *all_tracks_p = (tracks *)malloc(sizeof(tracks)*all_albums_p[j].num_tracks); 

for(i=0;i<all_albums_p[j].num_tracks;i++){ 

    fscanf(album_file,"%d", &number_of_charaters); 

    all_tracks_p[i].tracks_title = (char *)malloc(sizeof(char)*(number_of_charaters+1)); 

    fscanf(album_file, "%[^\n]s", all_tracks_p[i].tracks_title); 

    printf("%s\n",all_tracks_p[i].tracks_title); 

    all_tracks_p[i].playlist_hits = 0; 
} 

/*These is where it is giving me errors*/ 
for(i=0; i < 10 ;i++){ 
    printf("%d : %d\n",i,all_tracks_ptr[i].num_tracks); 
    for(j=0; j < number_of_albums[i].num_tracks ;j++){ 
    printf("%s", number_of_albums[i]->all_tracks[j].tracks_title) 
    } 
} 

私にエラーを与えるコンパイラが言っている:

project3.c:26:39: error: request for member 'num_tracks' in something not a structure or union 
project3.c:27:34: error: invalid type argument of '->' (have 'int') 
+1

'number_of_albums'は整数ですか? –

+0

好奇心の中で、このコードを自分で書いたのですか?これは経験の豊富なプログラマーが書いたプログラムの抜粋のように見えます。経験の少ないプログラマーが書いたコードに貼り付けられているかもしれません。 – thb

+0

はい私はそれを自分で書きました。しかし、私が書いたことの半分は理解できません。私は私が持っているメモから作品を貼り付けました。そして、ここで私を得た。 –

答えて

2

あなたが唯一のアルバムごとに1つのトラックに関連してきた今、それを宣言してきたように。私はあなたが、その後all_tracks変数を持つことが本当に意味がないことをやった後は、あなたがそれポインタ型

struct album_ { 
    int num_tracks; 
    struct tracks_* tracks; 
    }; 

作る必要がありますので、項目ごとに複数のトラックを宣言したいと考えています。トラックはアルバムに関連付けられているため、世界中ではなく各アルバム内にトラックを割り当てる必要があります。これは宿題なので、私は正確な答えを言いたくはありませんが、トリックはアルバムを一度に1つずつ初期化し、各アルバムにグループとしてトラックを追加することです。

+0

この調整をすれば私はタイトルのためにどのようにメモリをmallocしますか? 'all_albums_p [j] .tracks [i] .tracks_title =(char *)malloc(sizeof(char)*(number_of_charaters + 1));'私にセグメンテーション違反を与えました。 –

関連する問題