我有一個分配給我的數據結構課上做,我在一點點麻煩。我有一些結構,即:麻煩與void *的鑄造INT/char和替換結果
typedef struct {
char *materie;
int ore_curs;
int ore_lab;
int credit;
int teme;
} TMaterie;
typedef struct {
char *nume;
float medie;
char grupa[6]; // 324CB + NULL
int varsta;
} TStudent;
typedef struct {
void *key;
void *value;
int frequency;
} Pair;
typedef struct celulag {
void *info;
struct celulag *urm;
} TCelulaG, *TLG, **ALG;
最後一個是一個通用的列表結構,它將在info中接受任何類型的結構。的事情是,我需要將其轉換成一對的結構,這樣它會指出一個鍵(這將是或者是字符或int)和值(這將是類型TMaterie或TStudent的)。我需要作出規定分配該相應的功能,我已經成功地做到這一點:
TLG aloca_string_materie(char *key, TMaterie value){
TLG cel = (TLG) malloc(sizeof(TCelulaG));
if(!cel)
return NULL;
cel->info = (Pair*)malloc(sizeof(Pair));
if(!cel->info){
free(cel);
return NULL;
}
cel->urm = NULL;
((Pair*)cel->info)->value = (TMaterie*)malloc(sizeof(TMaterie));
((Pair*)cel->info)->key = (char*)malloc(50*sizeof(char));
((Pair*)cel->info)->frequency = 0;
((Pair*)cel->info)->key = key;
((TMaterie*)(Pair*)cel->info)->materie = value.materie;
((TMaterie*)(Pair*)cel->info)->ore_curs = value.ore_curs;
((TMaterie*)(Pair*)cel->info)->ore_lab = value.ore_lab;
((TMaterie*)(Pair*)cel->info)->credit = value.credit;
((TMaterie*)(Pair*)cel->info)->teme = value.teme;
return cel;
}
,我現在面臨的問題是,當我嘗試打印出來的關鍵,即
(((Pair*)cel->info)->key)
它給我同樣的價值
((TMaterie*)(Pair*)cel->info)->materie
我不知道爲什麼。
有人可以告訴我我做錯了什麼嗎?
[請參閱爲什麼不投的malloc()'和家庭'C'的'返回值的討論。(HTTP ://stackoverflow.com/q/605845/2173917)。 –
另外,我不得不說,應該有4個功能,他們每個人的分配是這樣的:1(鍵 - 字符串值 - TStudent),1(關鍵 - INT,價值 - TStudent)等。 –
這就是爲什麼我討厭typedefing指針.....嘆息...... –