我有以下结构:
typedef struct
{
char member1[100];
char member2[100];
} struct1_t;
typedef struct
{
struct1_t member_struct1;
} struct2_t;
typedef struct1_t *struct1_ptr;
typedef struct2_t *struct2_ptr;
我想访问member_struct1
内的struct2
,但我在以下代码中遇到非标量转换错误:
struct2_ptr driver = (struct2_ptr) malloc(sizeof(struct2_t));
driver->member_struct1 = (struct1_t)malloc(sizeof(struct1_t));
请建议。
答案 0 :(得分:2)
第一个电话
struct2_ptr driver = (struct2_ptr) malloc(sizeof(struct2_t));
为member_struct1
分配存储空间,以便您可以在第一个driver->member_struct1
之后安全取消引用malloc
并删除第二行。
答案 1 :(得分:2)
您正在构建一个指向结构类型的指针:
driver->member_struct1 = (struct1_t)malloc(sizeof(struct1_t));
malloc
返回一个指针。 struct1_t
不是指针类型。使member_struct1
成为指针类型。并且不要转换malloc
的返回值。
E.g:
#include <stdlib.h>
typedef struct
{
char member1[100];
char member2[100];
} struct1_t;
typedef struct1_t *struct1_ptr;
typedef struct
{
struct1_ptr member_struct1;
} struct2_t;
typedef struct2_t *struct2_ptr;
void your_func()
{
struct2_ptr driver = malloc(sizeof(struct2_t));
driver->member_struct1 = malloc(sizeof(struct1_t));
// ...
}