gpt4 book ai didi

c - 当我传递一个数组(哈希表)以将其更新到另一个函数时,我没有将更新后的表返回到 main 中

转载 作者:行者123 更新时间:2023-11-30 15:36:51 25 4
gpt4 key购买 nike

typedef struct hashtable
{
char str[15];
struct hashtable *next;
}htable;

int hashkey(char *str)
{
//correctly returns hash key
}

int hash(htable * ht, char str[15], int key)
{
//error checking done

if(ht[key].next==NULL)
{
htable * temp = (htable *)malloc(sizeof(ht));
strncpy(temp->str, str,15);

temp->next = NULL;
//printf("%s %d\n",temp->str,key);
ht[key].next = temp;
//printf("%s %d\n",ht[key].next->str,key);
return 1;
}

}
void main()
{

int cnt=0,key;
FILE *fp = fopen("Keywords.txt","r");

if(fp==NULL)
{
printf("Error\n");
return;
}

while(fgetc(fp)!=EOF)
cnt++;

htable ht[cnt];
char aa[15];
rewind(fp);

while(fgets(aa,15,fp))
{
key=hashkey(aa);

if(hash(ht,aa,key))
{
printf("%s %d\n",ht[key].str,key);
}
}


}

当关键字为:时的输出:并且,作为,分配,属性

14 7 47 100

但我希望输出是并且,作为,分配,属性

我不明白的是,当我将 ht 数组发送到 hash() 时,hash() 中的指针不应该修改内存位置吗?因此,当我尝试访问相同的内存位置时,我不应该获取存储的值而不是这些随机数值。谢谢! :)

最佳答案

查看内存分配:

int hash(htable * ht, char  str[15], int key) {
//...
htable * temp = (htable *)malloc(sizeof(ht));

ht 是一个指针,您在这里为指针分配内存(4 或 8 字节),而不是为结构 htable 分配内存。正确的是:

htable * temp = (htable *)malloc(sizeof(htable));

而且:您正在初始化 ht[key].next,然后打印 ht[key]:

//printf("%s %d\n",ht[key].next->str,key);  // this prints OK

printf("%s %d\n",ht[key].str,key); // this probably is not initialized

关于c - 当我传递一个数组(哈希表)以将其更新到另一个函数时,我没有将更新后的表返回到 main 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22422763/

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