C-试图创建哈希表时出错



我正在开发一个哈希表,它将字符串存储在链表中,这样我就可以避免冲突。然而,我遇到了两个错误,我不知道如何修复。我得到的第一个错误是在写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不兼容的指针类型[默认启用]。

您的函数声称返回一个指向HashTHashT **的指针,但最终返回的却是指向HashTHashT *的指针,这是NewT变量的类型。

函数的签名应该使用一个*,而不是两个。

相关内容

  • 没有找到相关文章

最新更新