繁体   English   中英

在C编程中,无论如何要获得子struct(struct中的struct)中函数的返回值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM