gpt4 book ai didi

c - 如何动态分配结构数组?

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:42 24 4
gpt4 key购买 nike

我如何为轨道动态分配结构数组,以便我可以使用 all_albums_p[i] 访问它?我需要 all_albums_p[i] 可以访问它,因为我要返回 all_albums_p。

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);

******** 我有什么已更改********

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

最佳答案

现在,您的每个专辑都有一个轨道,轨道名称应该是一个字符,而不是您可能想要的字符数组。

您已经正确分配了您的专辑,但您还需要分配每张专辑的轨道。

执行此操作的最简单方法是仅指定固定数量的轨道作为最大值,并确保您的其他代码不超过该数量。

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;
}

关于c - 如何动态分配结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9959140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com