请看我的最后一行。我该如何打印?我该如何施展它?我将其(word*)table_p -> buckets_array[0] -> data -> key
和(word*)table_p -> buckets_array[0] -> data -> frequency
投射?
typedef struct data_{
char *key;
void *data;
struct data_ *next;
}data_el;
typedef struct hash_table_ {
/* structure definition goes here */
data_el **buckets_array;
} hash_table, *Phash_table;
typedef struct word_{
char key[WORD_SIZE];
int frequency;
} word;
word *new_word;
new_word = (word *)malloc(sizeof(word));
new_word->frequency = 5;
new_word->key = "Lalalal";
Phash_table table_p;
table_p = (Phash_table)malloc(sizeof(hash_table));
table_p->buckets_array = (data_el **)malloc(sizeof(data_el *)*(size+1));
table_p->buckets_array[0]->data = (void*)new_word;
/*Is this right? How do I cast this? (word*) ?*/
printf("Key :%s Frequency:%d ",table_p->buckets_array[0]->data->key,
table_p->buckets_array[0]->data->frequency);
答案 0 :(得分:1)
Here you go。沿途固定的几个错误&你正在寻找疯狂的演员:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define WORD_SIZE 1024
typedef struct data_{
char *key;
void *data;
struct data_ *next;
}data_el;
typedef struct hash_table_ {
/* structure definition goes here */
data_el **buckets_array;
} hash_table, *Phash_table;
typedef struct word_{
char key[WORD_SIZE];
int frequency;
} word;
int main()
{
int size=0;
word *new_word;
new_word = (word *)malloc(sizeof(word));
new_word->frequency = 5;
strcpy(new_word->key, "Lalalal");
// ^ ^ ^ ^ - ooops! you need to copy lalalal bytes into key[] array
Phash_table table_p;
table_p = (Phash_table)malloc(sizeof(hash_table));
table_p->buckets_array = (data_el **)malloc(sizeof(data_el *)*(size+1));
table_p->buckets_array[0] = (data_el *)malloc(sizeof(data_el));
// ^ ^ ^ ^ - ooops! you might need some data_el lol
table_p->buckets_array[0]->data = (void*)new_word;
/*Is this right? How do I cast this? (word*) ?*/
word* pdata=table_p->buckets_array[0]->data;
// ^ ^ ^ ^ - the readable way
printf("Key :%s Frequency:%d ",((word*)(table_p->buckets_array[0]->data))->key, //<--the insane cast way (promote void* data_el.data to a word*)
pdata->frequency);
return 0;
}
祝你好运!