我正在处理一个在链表中存储字符串的哈希表,这样我就可以避免冲突了。但是,我收到两个错误,我不确定如何修复。我得到的第一个错误是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;
}
答案 0 :(得分:2)
我得到的第一个错误是
NewT->Table[i] == NULL;
行。这是warning: statement with no effects [-Wunused-value]
。
此错误显示是因为代码正在进行比较,而不是分配。比较返回的值(Table[i]
为空?)本身没有分配给其他任何东西,这意味着它没有被使用。
保留一个=
运算符而不是加倍==
运算符,以确保实际分配而不是比较。
我得到的第二个错误是在同一个函数中。错误在于 该行返回NewT并且错误是警告:从中返回 不兼容的指针类型[默认启用]。
您的函数声称返回指向HashT
或HashT **
指针的指针,但您最终会返回指向HashT
或HashT *
的指针,这是NewT
变量的类型。
您的函数的签名应使用单个*
而不是两个。