我试图在结构中转换结构,但遇到了问题,这是我的简化代码:
#include <stdlib.h>
typedef struct {
void *test;
} abc;
typedef struct {
int a;
int b;
} def;
int main()
{
abc *mystruct = malloc(sizeof(abc) + sizeof(def));
mystruct->(def *)test->a = 3;
return 0;
}
abc 结构中可能有不同类型的结构,所以我想动态转换,但是,这似乎不起作用。如何在一条语句中完成此操作?
最佳答案
将分配分成两部分,首先:
abc *mystruct = malloc( sizeof(abc) );
但是,当您尝试做时(如果测试会被正确转换)
mystruct->test->a
test
成员没有指向任何地方,通过取消引用它你会得到未定义的行为。
首先将其指向有效内存
mystruct->test = malloc( sizeof( def ) ) ;
然后就可以使用了:
( ( def *)mystruct->test )->a = 3;
^ ^
注意括号,您正在转换成员 void,它是 mystruct->test
而不仅仅是 test
。
关于C 在结构内部从 void * 进行类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26961463/