如何访问位于另一个struct内部的struct中的数组/其他类型的数据。这是我到目前为止所尝试的,并且它的出现c
未被声明。我知道我可以将c
声明为prod_t *c
,但它违背了我试图做的事情的目的,因为它不存在于root
(a_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;
}
答案 0 :(得分:5)
在您的代码中,c->name
不是有效的变量名称。 c
是结构变量root
的成员变量。没有名为c
的独立变量。
您可以使用
root->c->name = malloc( 5 );
和
strcpy(root->c->name, "abc");
和
printf("%s\n", root->c->name);
另外,请记住,
sizeof(char)
保证在1
中生成C
,因此您可以删除该部分。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 );
考虑到一般情况下你必须检查"外部"指针已成功"已分配"在分配"内部"指向的内存之前指针。