私はC言語を新しくしており、現在スペルチェッカーを書いています。これを行うために、私は最初に簡単な参照のためにハッシュテーブルに単語の辞書をロードしています。ここに私のコードは次のとおりです。C:リンクされたリストのハッシュテーブルの人口問題
bool load(const char* dictionary)
{
typedef struct node
{
char word[LENGTH + 1];
struct node* next;
}
node;
node* table[500];
FILE *fp;
fp = fopen("dictionaries/small", "r");
if(fp == NULL)
{
return 0;
}
node* new_node = malloc(sizeof(node));
fscanf(fp, "%s", new_node->word);
int hashed_word = hash_function(new_node->word);
if(table[hashed_word] == NULL) //if the table has no value at the index
{
table[hashed_word]->word = new_node->word; //Issue here
}
return 0;
}
このコードは非常に単純にファイルの最初の行(ワード)を読み込み、(最初の単語「猫」の2のハッシュを与える)、それをハッシュします。私はそれから、テーブルがハッシュ関数が与えるインデックスに単語がないことを確認します。
最初のリンク( 'cat')の最初のリンクでリンクリストを開始したいのですが、そこからビルドします。私はこのコードを実行するときしかし、私はここでの問題を得る:
table[hashed_word]->word = new_node->word; //Issue here
と、このエラーが発生します。
dictionary.c:66:34: error: array type 'char [46]' is not assignable
table[hashed_word]->word = new_node->word;
~~~~~~~~~~~~~~~~~~~~~~~~^
1 error generated.
私は(この行は「猫」であると「単語」テーブルの一部を割り当てることだろうと思いましたnew_nodeの単語部分)はありません。
誰かが間違っていることを教えていただけますか?私はポインターが混乱しているので、それが非常に基本的だと思います!私は数日間このことに固執していて、少し落胆し始めているので、提供される可能性のあるヘルプが大好きです。
まあ...配列型に割り当てることはできません。おそらく 'memcpy'や' strcpy'(あるいはその安全なバリエーション)が必要でしょう。 –
私は以前のようなものを試してみましたが、セグメンテーション違反があったので間違ったトラックにいると思いました – user1636588
'table [hashed_word] == word'は' table [hashed_word] - > word'が 'NULL-> * table [500]; 'は初期化されていません) – BLUEPIXY