2012-03-31 142 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'是一個整數嗎? – 2012-03-31 15:59:08

+0

好奇心,你自己寫了這段代碼嗎?它看起來像是一個由更有經驗的程序員編寫的程序的摘錄,可能會粘在由經驗較少的程序員編寫的代碼上。 – thb 2012-03-31 15:59:15

+0

是的,我自己寫了。但我不明白我寫的一半。我只是將我筆記中的碎片粘在一起。它讓我在這裏。 – 2012-03-31 16:01:30

回答

2

正如你已經聲明,現在你只相關的每張專輯一首曲目。我相信你要申報每個項目多音軌,所以你應該讓一個指針類型

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

一旦你做到了這一點,然後有一個all_tracks變量並沒有真正意義。曲目與專輯相關聯,因此您希望在每個專輯中分配它們而不是全局分配。由於這是功課,我不想給出確切的答案,但訣竅在於一次初始化一個專輯並將曲目作爲一個組添加到每個專輯。

+0

如果我做這個調整。我如何malloc標題的內存? 'all_albums_p [j] .tracks [i] .tracks_title =(char *)malloc(sizeof(char)*(number_of_charaters + 1))''給了我一個分段錯誤。 – 2012-03-31 16:31:47

相關問題