-1

我有以下结构:

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));

请建议。

4

2 回答 2

2

第一次通话

struct2_ptr driver = (struct2_ptr) malloc(sizeof(struct2_t));

分配存储空间,以便您可以在第一行之后member_struct1安全地取消引用并删除第二行。driver->member_struct1malloc

于 2013-08-30T16:35:42.360 回答
2

您正在转换一个指向结构类型的指针:

driver->member_struct1 = (struct1_t)malloc(sizeof(struct1_t));

malloc返回一个指针。struct1_t不是指针类型。制作member_struct1一个指针类型。并且不要强制转换的返回值malloc

例如:

#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));
    // ...
}
于 2013-08-30T16:41:50.873 回答