#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dictionary.h"
#define HASH_SIZE 100
// prototype
int hash(char *word);
// counter
int counter;
// node
typedef struct
{
char *word;
node *next;
} node;
// hash table
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))
{
// get word into a string
char gotcha[LENGTH];
fscanf(dict, "%s", gotcha);
// declare a node and allocate memory
node n;
n.word = malloc( strlen(gotcha)*sizeof(char) );
// save the word into the node
strcpy(n.word, gotcha);
// hash the word, baby!
int hash_value = hash(n.word);
// start saving addresses to the hashtable
n.next = hashtable[hash_value];
hashtable[hash_value] = &n;
//test
int len = strlen(n.word);
printf("%s\n", n.word);
printf("%i\n", len);
// that's one more!
counter++;
}
fclose(dict);
return true;
}
我在这两行代码中收到以下两个错误:
n.next = hashtable[hash_value];
hashtable[hash_value] = &n;
dictionary.c:89:16:错误:从不兼容的指针类型赋值[-Werror] dictionary.c:90:31:错误:从不兼容的指针类型赋值[-Werror] 如何在这两个地方保存指针值?我是新手,所以请记住这一点。 :)
答案 0 :(得分:2)
在您的结构中,尚未定义类型节点。将其更改为使用结构标记:
typedef struct node
{
char *word;
struct node *next;
} node;
答案 1 :(得分:0)
此:
typedef struct
{
char *word;
node *next;
} node;
是语法错误。 node *next;
发生在创建node
类型的typedef结束之前。如果您的编译器出于某种原因接受了这一点,它可能认为现在有2种不同的类型称为“节点”,这就解释了为什么其中一种不能与另一种相容。你应该放弃那种typedef愚蠢(结构通常不应该是typedef),只需使用
struct node
{
char *word;
struct node *next;
};
答案 2 :(得分:0)
在定义结构之前定义结构的typedef名称。这允许相互引用结构而不关心顺序,并且不需要不一致的定义,有时使用struct关键字,有时不使用它。请注意,在C ++中,您可以完全取消typedef行:
typedef struct node node;
struct node
{
char* word;
node* next;
};