c - 如何访问另一个结构中的结构数组?

标签 c

如何从另一个结构访问一组结构?我想从 all_albums_p 访问 track_titles。我 尝试了 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')

最佳答案

正如您声明的那样,您现在每张专辑只关联了一首轨道。我相信您想为每个项目声明多个轨道,因此您应该将其设为指针类型

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

一旦你这样做了,那么拥有一个 all_tracks 变量就没有意义了。轨道与专辑相关联,因此您希望在每个专辑中而不是全局分配它们。由于这是家庭作业,我不想给出确切的答案,但诀窍是一次初始化一个专辑,并将轨道作为一个组添加到每个专辑中。

关于c - 如何访问另一个结构中的结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9957396/

相关文章:

c - 为什么我可以分配一个局部变量并对其进行读取,但如果我尝试在结构中分配一个指针并读取它,则会出现段错误?

c - 为什么windows API需要传入那么多参数?

c - 矩阵的简单转换但是出了什么问题?

c - Union Find - 快速查找

sql - 语句handle(hstmt)到底是做什么的?在 ODBC 中

C webserver中进程间的跨平台通信方式

c - malloc 内存损坏,fopen

c - 为什么我的答案是 0.00.. 混淆如何将 int 转换为 float 结构

c - 如何从完整路径中提取文件名

c++ - C 和 C++ 的数组大小声明差异