指向另一个struct内部的struct内的数组

时间:2015-05-19 09:36:03

标签: c arrays struct

如何访问位于另一个struct内部的struct中的数组/其他类型的数据。这是我到目前为止所尝试的,并且它的出现c未被声明。我知道我可以将c声明为prod_t *c,但它违背了我试图做的事情的目的,因为它不存在于roota_t struc)内。

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

2 个答案:

答案 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()个。

答案 1 :(得分: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 );

考虑到一般情况下你必须检查"外部"指针已成功"已分配"在分配"内部"指向的内存之前指针。