gpt4 book ai didi

c - 在地址中存储数据并更改 C 中变量的地址?

转载 作者:行者123 更新时间:2023-11-30 18:02:32 25 4
gpt4 key购买 nike

这里是新手,

我有一个单词的结构,其中包含单词本身的字符数组(该结构还有其他函数,与我的问题无关),我试图将其存储在 HashMap 中,这是一个数组字结构指针。在我的程序中,每当我看到一个新单词时,我都会创建一个新单词结构并使用 malloc 字符数组来创建它。然而,在循环运行几次之后,它将旧单词更改为新单词,即使它位于不同的 HashMap 位置。

我想知道是否可以让创建新单词结构的循环指向新地址?

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;

这是有问题的代码。

我的问题的一个例子:在循环的第一次运行中,我将 add.word 设置为 apple,它存储在特定的 HashMap 槽中。在循环的下一次运行中,我将 add.word 设置为橙色,它存储在不同的插槽中。问题是,在第一个插槽中,它不再存储苹果,而是存储橙色,所以我有 2 个存储橙色的插槽,这不是我想要的。我该如何解决这个问题?

最佳答案

一个简单的解决方案(我认为)是将向 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),您必须记住首先释放它。

关于c - 在地址中存储数据并更改 C 中变量的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9156341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com