【问题标题】:How would I print this?我将如何打印这个?
【发布时间】:2012-05-06 18:22:31
【问题描述】:

请看我的最后一行。我将如何打印这个?我该如何施放它?我要投它(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);

【问题讨论】:

    标签: c pointers casting structure


    【解决方案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
    
    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;
    }
    

    【讨论】:

    • 非常感谢,没想到完整的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 2023-02-23
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多