gpt4 book ai didi

C - 尝试制作哈希表时出错

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:27 25 4
gpt4 key购买 nike

我正在研究一个哈希表,该哈希表将字符串存储在链接列表中,这样我就可以避免冲突。但是,我收到两个错误,我不确定如何修复。我遇到的第一个错误是在 NewT->Table[i] == NULL; 行中。它说的是 warning: statement with no effects [-Wunused-value]

我遇到的第二个错误是在同一个函数中。错误在 return NewT 行中,错误是 warning: return from incompatible pointer type[enabled by default]。我已经盯着这个看了一段时间,但我看不到哪里有未使用的值,即使经过一些研究,我也不知道返回错误意味着什么。有人可以向我解释这些并帮助我解决它们吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define HASH_MULTIPLIER 65599

/*Structures*/
typedef struct List_T
{
char *str;
int count;
struct List_T *next;
} ListT;

typedef struct Hash_T
{
int htsize;
ListT **Table;
} HashT;

/*Prototypes*/
unsigned int hash(const char *str);
HashT **ht_create(void);

int htsize;

int main(int argc, char *argv[])
{
if (argc <= 1)
{
printf("Please declare a table size");
return 1;
}
htsize = atoi(argv[1]);
return 0;
}
unsigned int hash(const char *str)
{
int i;
unsigned int h = 0U;

for (i = 0; str[i] != '\0'; i++)
h = h * HASH_MULTIPLIER + (unsigned char) str[i];

return h % htsize;
}

HashT **ht_create(void)
{
HashT *NewT;
int i;

if (htsize < 1) //invalid size for
{
fprintf(stderr,"Invalid Size for table");
exit(0);
}

if ((NewT = malloc(sizeof(HashT))) == NULL)
{
fprintf(stderr,"Invalid size for table");
exit(0);
}

if ((NewT->Table = malloc(sizeof(ListT *) * htsize)) == NULL)
{
fprintf(stderr,"Invalid size for table");
exit(0);
}

for (i = 0; i<htsize; i++)
{
NewT->Table[i] == NULL;
}

NewT->htsize = htsize;

return NewT;
}

最佳答案

The first error I am getting is in the line that says NewT->Table[i]
== NULL;
. It's saying warning: statement with no effects [-Wunused-value].

出现此错误是因为代码正在进行比较 而不是赋值。比较返回的值(是 Table[i] null?)本身没有分配给任何其他东西,这意味着它未被使用。

保留一个=运算符而不是加倍的 ==以确保您实际上是在分配而不是比较。

The second error I'm getting is in the same function. The error is in the line return NewT and the error is warning: return from incompatible pointer type[enabled by default].

您的函数声称返回一个指向 HashT 的指针, 或 HashT ** , 但你最终返回了一个指向 HashT 的指针, 或 HashT *相反,这是你的 NewT 的类型变量。

您的函数签名应使用单个 *而不是两个。

关于C - 尝试制作哈希表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33643513/

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