我正在开发一个哈希表,它将字符串存储在链表中,这样我就可以避免冲突。然而,我遇到了两个错误,我不知道如何修复。我得到的第一个错误是在写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] != ' '; 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;
}
我得到的第一个错误是在写
NewT->Table[i] == NULL;
的行中。上面写着warning: statement with no effects [-Wunused-value]
。
出现此错误是因为代码正在进行比较,而不是赋值。比较返回的值(Table[i]
为null吗?)本身没有分配给任何其他值,这意味着它未被使用。
保留一个单独的=
操作符,而不是两个==
操作符,以确保您实际上是在赋值而不是进行比较。
我得到的第二个错误是在同一个函数中。错误在该行返回NewT,错误为警告:return from不兼容的指针类型[默认启用]。
您的函数声称返回一个指向HashT
或HashT **
的指针,但最终返回的却是指向HashT
或HashT *
的指针,这是NewT
变量的类型。
函数的签名应该使用一个*
,而不是两个。