2
#define HASH_SIZE 5

// prototype
int hash(char *word);

// counter
int counter;

// node
typedef struct node
{
    char word[LENGTH + 1];
    struct node *next;
} node;

// hash table
struct node *hashtable[HASH_SIZE];
  bool
load(const char *dictionary)
{
    // open the dictionary
    FILE *dict = fopen(dictionary, "r");
    if(dict == NULL)
    {
        printf("Could not open %s.\n", dictionary);
        return false;
    }

    // set all values in the hash table to null
    for(int i = 0; i < HASH_SIZE; i++)
    {
        hashtable[i] = NULL;
    }

    // set the counter to 0
    counter = 0;

    // iterate through the words in the dictionary
    while (!feof(dict))
    {
        //declare a node
        node *n = malloc( sizeof(node) );

        // copy the word into the node
        fscanf(dict, "%s", n.word);

        // hash the word
        int hash_value = hash(n.word);

        // start saving addresses to the hashtable
        n.next = hashtable[hash_value];
        hashtable[hash_value] = &n;

        // that's one more!
        counter++;
    }


    fclose(dict);

    return true;
}

次の行の場合:

        //declare a node
    node *n = malloc( sizeof(node) );
// hash the word
    int hash_value = hash(n.word);

    // start saving addresses to the hashtable
    n.next = hashtable[hash_value];
    hashtable[hash_value] = &n;r code here

次のエラーメッセージが表示されます。

dictionary.c:関数'load'内:
dictionary.c:112:29:エラー:構造体またはユニオン辞書ではないもののメンバー'word'の
要求c:135:32:エラー:メンバー'word'の要求構造体またはユニオン
ディクショナリではないもの。c:138:10:エラー:構造体またはユニオン
ディクショナリではないもののメンバー'next'の要求。c:139:31:エラー:互換性のないポインタ型からの割り当て[-Werror]

何が問題なのですか?

4

1 に答える 1

3

本当に簡単です:

node *n = malloc( sizeof(node) );
fscanf(dict, "%s", n.word);

nへのポインターですがnode、それ自体が であるn.wordことを意味します。ポインターの場合、構文は少し異なります。nnode

fscanf(dict, "%s", n->word);
于 2012-07-30T00:34:56.880 に答える