右現在、各アルバムには1つのトラックがあり、トラック名は1つの文字になる予定です。おそらくあなたが望むもの、すなわち文字配列のnstead。
既にアルバムを正しく割り当てていますが、各アルバムのトラックも割り当てる必要があります。
これを行う最も簡単な方法は、固定数のトラックを最大値として指定し、他のコードがそれを超えないようにすることです。
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'はほぼ間違っています。 –
あなたのコードはすでに正しい解決法です。配列all_albums_p [i]を使って配列 – thumbmunkeys
にアクセスできます。tracks_titleに文字列を割り当てるにはどうしたらいいですか? –