2015-05-19 4 views
1

Как получить доступ к массиву/другому типу данных, который находится внутри структуры, которая находится внутри другой структуры. Это то, что Ive пробовал до сих пор, и его появление, поскольку c не объявлено. Я знаю, что могу объявить c как prod_t *c, но он побеждает цель чего-то, что я пытаюсь сделать, поскольку он не существует внутри root (a_t).Указание на массив внутри структуры, которая находится внутри другой структуры

typedef struct { 
    char *name; 
} prod_t; 

typedef struct { 
    prod_t *c; 
} a_t; 



int 
main(int agrc, char **argv){ 
    a_t *root = malloc(sizeof(a_t)); 
    root->c=malloc(sizeof(prod_t)); 

    c->name = malloc(5 * sizeof(char)); 
    strcpy(c->name, "abc"); 

    printf("%s",root.c->name); 



    return 0; 
} 

ответ

5

В коде c->name не является допустимым именем переменной. c - членная переменная структурной переменной root. Нет автономный переменная с именем c.

Вы можете использовать как

root->c->name = malloc(5); 

и

strcpy(root->c->name, "abc"); 

и

printf("%s\n", root->c->name); 

Кроме того, помните,

  1. sizeof(char) гарантированно производит 1 в C, поэтому вы можете отказаться от этой детали.
  2. Как только вы закончите использовать выделенную память, вам необходимо указать free().
+0

ах, я вижу СПАСИБО !! – Kyuu

1

У вас есть три указателя, один из которых «заключен» в другой. Таким образом, вы должны написать

root->c->name = malloc(5 * sizeof(char)); 
strcpy(root->c->name, "abc"); 

printf("%s",root->c->name); 

И вы должны освободить их в следующем порядке

free(root->c->name); 
free(root->c); 
free(root); 

принять во внимание, что в целом вы должны проверить, успешно ли был «выделен» «внешний» указатель до выделения памяти, на которую указывает «внутренний» указатель.