2013-08-30 109 views
-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_struct1struct2但我得到下面的代碼非標轉換錯誤:

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

請建議。

+0

你到底想幹什麼?第二個'malloc'的目的是什麼?你想通過它分配什麼,爲什麼? – AnT

+0

我需要爲struct2的memner_struct1分配一個新值 – Arun

+0

爲了「爲struct2的memner struct1賦值」,不需要第二個'malloc'。第一個'malloc'分配了內存,現在你可以在內存中分配所有你想分配的內容。不需要任何額外的'malloc's。你爲什麼把第二個'malloc'放在那裏? – AnT

回答

2

第一個電話

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

member_struct1分配存儲空間,所以你可以安全地引用這些driver->member_struct1第一malloc後並刪除第二行。

+0

我試過這個來代替第二行:strcpy(((struct1_t)driver) - > member_struct1-> member1,「sample string」);但是這會拋出「轉換爲非標量類型請求」 – Arun

+1

嘗試'strcpy(driver-> member_struct1.member1,「sample string」);'。這個轉換是錯誤的,'member_struct1'的成員是通過值而不是指針,因此可以使用結構解引用運算符''來訪問。' – simonc

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)); 
    // ... 
} 
+0

這是正確的答案。 – pablo1977

+0

爲什麼需要第二個'malloc'? 'member_struct1'不是一個指針,所以會有'driver'分配的空間。 – simonc

+0

@simonc:這不是必需的。我只是假設他想動態分配,因爲你知道,他正在使用'malloc'。 :P – netcoder