C 如何创建包含指向另一个未指定类型的结构的指针的结构?
这是将包含另一个(变量)结构的结构: 我不知道该结构将是什么,因为我希望有一个可供嵌套的结构选择,然后根据需要转换为正确的类型。例如:C 如何创建包含指向另一个未指定类型的结构的指针的结构?,c,struct,casting,segmentation-fault,malloc,C,Struct,Casting,Segmentation Fault,Malloc,这是将包含另一个(变量)结构的结构: 我不知道该结构将是什么,因为我希望有一个可供嵌套的结构选择,然后根据需要转换为正确的类型。例如: typedef struct{ char * policy; int size; char * addr; } PS_call_struct; 我使用此函数初始化这些结构: threadHandle * createHandle(char * mem_addr, char * name, int option, void *
typedef struct{
char * policy;
int size;
char * addr;
} PS_call_struct;
我使用此函数初始化这些结构:
threadHandle * createHandle(char * mem_addr, char * name, int option, void * struct_pointer){
threadHandle * new = malloc(sizeof(threadHandle));
new->mem_addr = malloc(strlen(mem_addr)+1);
strcpy(new->mem_addr,mem_addr);
new->name = malloc(strlen(name)+1);
strcpy(new->name,name);
new->option = malloc(sizeof(int));
new->option = option;
new->struct_pointer = malloc(strlen(struct_pointer)+1);
strcpy(new->struct_pointer,struct_pointer);
return new;
}
还有这个:
PS_call_struct * createPS_call_struct(char *policy, int size, char *addr){
PS_call_struct * new = malloc(sizeof(PS_call_struct));
new->policy = malloc(strlen(policy)+1);
strcpy(new->policy, policy);
new->size = malloc(sizeof(int));
new->size = size;
new->addr = malloc(strlen(addr)+1);
strcpy(new->addr, addr);
return new;
}
一旦我想使用嵌套结构,我就会强制转换它。我测试它如下:
PS_call_struct * ps1 = createPS_call_struct(&h, 999, &k);
Handle * write_handle = createHandle(SRV_SOCK_PATH, "thread_cream",777,ps1);
PS_call_struct * techk = (PS_call_struct* )(write_handle->struct_pointer);
现在我有一个问题,因为重铸后我无法访问任何值。我可以毫无问题地访问ps1
的值,但techk
的值大多为空。我不能像下面那样指定结构类型,因为我希望可以选择使用另一种结构类型
typedef struct {
char * mem_addr;
char * name;
int option;
int write_byte_size;
PS_call_struct * struct_pointer;
} Handle;
我不确定我所问的是否真的可行,或者我的方法是否不正确。谢谢您的帮助。strlen函数需要指向以null结尾的字符串的指针。在
createHandle
中,struct\u pointer
不是以null结尾的字符串,而是指向PS\u call\u struct
的指针,因此这不会像您预期的那样工作
实际上,您只需将指针分配给struct\u pointer
:
new->struct_pointer = struct_pointer;
此外,这也没有意义:
new->option = malloc(sizeof(int));
new->option = option;
因为字段选项
不是指针,而只是一个int
,所以不要调用malloc
new->option = malloc(sizeof(int));
new->option = option;