Я думаю, что ваш код в порядке, как есть.Если у вас возникли проблемы, это может быть связано с тем, как вы вызываете функцию.Например, вот быстрый и грязный пример:
#include <stdio.h>
#include <stdlib.h>
int num_words;
/* paste sample code here */
#define HASH_TABLE_SIZE 10
// rest of code
void ws_add_word(char *word_to_add)
{
// function code
}
/* end of sample code */
int main (void)
{
char a[] = "Hello";
char b[] = "Helkp"; // chosen to have the same hash result
ws_add_word((char *)&a);
ws_add_word((char *)&b);
}
Я скомпилировал с gcc -g
и пробежал по gdb
.Делая это, проходя через ws_add_word
и просматривая содержимое word_hash_table
, похоже, получаешь то, что хочешь.Если это все еще не работает, вы должны привести пример того, как вы звоните ws_add_word
.
Кроме того, если вы просто измените p->word = word_to_add
на strcpy(p->word,word_to_add)
, вы, вероятно, получите ошибку сегмента, потому чтоp->word
пока не настроен на что-либо значимое.Вам нужно p->word = (char *)malloc(N)
, где N
достаточно велик, а затем strcpy
, если вы действительно этого хотите.То, хотите вы этого или нет, зависит от того, будет ли место памяти, на которое указывает char *word_to_add
, действительным в следующий раз, когда вам понадобится его использовать.