權現在,您的每張專輯都有一首曲目,曲目名稱預計爲單個字符,即i除了你可能想要的,一個字符數組。
您已經正確地分配了您的專輯,但您也需要分配每個專輯的曲目。
最簡單的方法是隻指定一個固定數量的軌道作爲最大值,並確保其他代碼不超過該數量。
const int MAX_TRACKS = 20;
const int MAX_HITS = 20;
const int MAX_TRACK_NAME_LENGTH = 63;
struct track_{
char tracks_title[MAX_TRACK_NAME_LENGTH+1];
int playlist_hits[MAX_HITS];
int playlist_hits_count;
};
struct album_ {
int num_tracks;
struct track_ tracks[MAX_TRACKS];
};
或者,您可以動態分配曲目和曲目名稱到所需的確切大小,如果您擁有該信息便利。例如,假設你只是在做專輯的現有陣列的副本:
struct track_ {
char *track_title;
int *playlist_hits;
int playlist_hits_count;
};
struct album_ {
int num_tracks;
struct track_ *tracks;
};
typedef struct album_ album;
typedef struct track_ track;
album *copy_albums(album *all_albums_p, int number_of_album) {
album *all_albums_copy = (album *)malloc(sizeof(album) * number_of_album);
// copy each album
for (int album_i = 0; album_i < number_of_album; album_i++) {
album * current_album = all_albums_p + album_i;
album * copy_album = all_albums_copy + album_i;
copy_album->num_tracks = current_album->num_tracks;
copy_album->tracks = (track *)malloc(sizeof(track) * current_album->num_tracks);
// copy each track, and it's hits, and make a new copy of it's name
for (int track_i = 0; track_i < current_album->num_tracks; track_i++) {
track * current_track = current_album->tracks + track_i;
track * copy_track = copy_album->tracks + track_i;
copy_track->playlist_hits_count = current_track->playlist_hits_count;
copy_track->playlist_hits = (int *)malloc(sizeof(int) * current_track->playlist_hits_count);
memcpy(copy_track->playlist_hits, current_track->playlist_hits, current_track->playlist_hits_count * sizeof(int));
copy_track->track_title = _strdup(current_track->track_title);
}
}
return all_albums_copy;
}
'char track_title'幾乎肯定是錯的。 – 2012-03-31 19:52:55
你的代碼已經是正確的解決方案,你可以使用'all_albums_p [i]'來訪問數組 – thumbmunkeys 2012-03-31 19:53:19
如何爲tracks_title中的字符串分配? – 2012-03-31 19:54:28