[英]in C programming, is there anyway to get return value of function in child struct(struct in struct)?
我正在尝试在double结构中返回一些函数。
当您获得单个结构的返回值时,总是可以的。 我想做的是在结构结构中定义结构。 也就是说,在父结构中创建子结构。 例如,从下面的源代码中可以看到,我已经制作了两个结构“ Person”和“ Machine”,然后我想在“ Machine”下添加Person结构,以便获得双重结构,可以使用定义机工。 然后想在父结构的其中一个结构中获得某个函数的返回值,该结构是machine-> person-> name。每次我在buff-> PD中返回时,都会发生一些错误。 当然,可以使用诸如Person或Machine之类的单个结构,这不是我想要的。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _Person {
char name[20];
int age;
} Person;
typedef struct _Machine {
char address[100];
Person PD ;
} Machine;
Person *GetPersonData(){
Person *pd = (Person*)malloc(sizeof(Person)) ;
strcpy(pd->name, "GETperson");
return pd ;
//free (pd) ;
}
Machine *GetMachineData(){
Machine *md = (Machine*)malloc(sizeof(Machine)) ;
strcpy(md->address, "GETmachine");
return md ;
//free (md) ;
}
Person *GetPDdata(){
Person *pd = (Person*)malloc(sizeof(Person)) ;
strcpy(pd->name, "GOT Machine people");
return pd ;
//free (md) ;
}
int main(){
Person *p1;
Machine *m1 ;
Machine *buff ;
p1 = GetPersonData() ;
m1 = GetMachineData() ;
buff->PD = GetPDdata() ; // Error code
m1->PD.name = buff->PD.name ; // Error code
return 0;
}
buff->PD = GetPDdata() ; // Error code
在这里,buff不会用任何值初始化。 你需要先分配增益
m1->PD.name = buff->PD.name ; // Error code
在这里,您不能直接分配字符串,您需要使用strcpy
buff->PD = GetPDdata() ; // Error code
这将不起作用,因为GetPDdata()向人员而不是人员本身返回“指针”。 因此,您需要执行以下任一操作:
buff->PD = *GetPDdata() ; // Error code
从GetPDdata()
返回的指针进行复制(在这种情况下,您所做的内存分配变得毫无意义)。
否则,您可以使用:
p1 = GetPDdata();
这很好,因为p1也是指向人的指针。
m1->PD.name = buff->PD.name ; // Error code
这里的问题是您不能将一个数组分配给另一个。 您必须逐个字符地复制字符或使用诸如memcpy
东西。
我相信问题出在结构定义上。 由于您想直接在机器内部分配人员,因此我建议为Machine
结构指定一个不同的定义
typedef struct _Machine {
char address[100];
Person *PD ;
} Machine;
然后,您只需一个功能即可获取人员数据。 您可以删除功能GetPDdata
可以修改函数GetMachineData
来获取机器和人员数据,如下所示
Machine *GetMachineData(){
Machine *md = (Machine*)malloc(sizeof(Machine)) ;
strcpy(md->address, "GETmachine");
md->PD = GetPersonData();
return md ;
}
以上是推荐的方法,但您也可以在主机中分别获取机器和人员数据。
// keeping GetMachineData unchanged from original question.
int main(){
Machine *buff ;
buff = GetMachineData();
buff->PD = GetPersonData();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.