新手在这里,
我有一个单词的结构,其中包含单词本身的char数组(结构有其他函数,与我的问题无关),我试图将它存储在一个hashmap中,这是一个数组单词struct指针。在我的程序中,每次看到一个新单词时,我都会创建一个新单词struct和malloc char-array来创建它。但是,经过几次循环之后,它会将旧单词更改为新单词,即使它位于不同的hashmap位置。
我想知道的是,是否可以将我创建新单词struct的循环指向新地址?
struct words add;
int b;
for(b = 0; b < strlen(LowerCaseCopy); b++)
{
add.word[b] = '\0';
}
for(b=0;b< strlen(LowerCaseCopy);b++)
{
add.word[b] = LowerCaseCopy[b];
}
hashmap[hashf] = &add;
这是有问题的代码。
我的问题的一个例子: 循环的第一个runthrough,我将add.word设置为apple,它存储在特定的hashmap槽中。 循环的下一个粗略,我将add.word设置为orange,它存储在不同的插槽中。问题是,在第一个插槽,它不再存储苹果,而是存储橙色,所以我有2个存储橙色的插槽,这不是我想要的。我该如何解决这个问题?
答案 0 :(得分:0)
一个简单的解决方案(我认为)就是将功能添加到一个单独的函数中的hashmap中。此函数分配一个新的words
结构并将其放入hashmap:
void add_to_hashmap(struct something *hashmap, char *lower_case_word)
{
/* Using "calloc" we don't have to manually clear the structure */
struct words *words = calloc(1, sizeof(struct words));
/* Copy +1 to include the terminating '\0' */
memcpy(words->word, lower_case_word, strlen(lower_case_word) + 1);
/* Replace this with whatever you use to calculate the hash */
int hashf = calculate_hash(lower_case_word);
hashmap[hashf] = words;
}
如果您删除某个条目(即将其设置为NULL
),则必须先记得将其释放。