C 简单、非加密哈希函数的实现

C 简单、非加密哈希函数的实现,c,hash,hashtable,C,Hash,Hashtable,我是编程新手,正在努力弄清楚如何使用简单的散列函数 例如,我把下面的代码放在一起测试RS散列函数(在C中),我一直得到一个SEGFULT 也许是我错误地实现了这个功能。。。我尝试了其他一些简单的散列函数(例如PJW),也得到了SEGFULTS 我确实删除了函数的一个原始参数(unsigned int length)(因为我正在完成一个问题集,而哈希函数的规范是它应该只接受一个const字符串作为输入),但我认为这很好,因为我认为这个参数指的是字符串长度,我可以在函数内部使用strlen轻松地获得

我是编程新手,正在努力弄清楚如何使用简单的散列函数

例如,我把下面的代码放在一起测试RS散列函数(在C中),我一直得到一个SEGFULT

也许是我错误地实现了这个功能。。。我尝试了其他一些简单的散列函数(例如PJW),也得到了SEGFULTS

我确实删除了函数的一个原始参数(unsigned int length)(因为我正在完成一个问题集,而哈希函数的规范是它应该只接受一个const字符串作为输入),但我认为这很好,因为我认为这个参数指的是字符串长度,我可以在函数内部使用strlen轻松地获得它,而不是将它传递给函数。我尝试使用valgrind进行调试,但它没有显示任何内存泄漏。也许我缺少一些关于如何将外部代码合并到自己的源代码中的基本知识

unsigned int hash(const char *word);

int main(int argc, char *argv[])
{
    // Return error if string name missing from command line
    if (argc != 2)
    {
        printf("Usage: ./recover.c string name\n");
        return 1;
    }
    int i = hash(argv[2]);
    printf("%i\n", i);
}

unsigned int hash(const char *word) // RS Hashing function
{
    unsigned int b = 378551;
    unsigned int a = 63689;
    unsigned int hash = 0;
    unsigned int length = strlen(word);
    unsigned int i = 0;

    for (i = 0; i < length; word++, i++)
    {
        hash = hash * a + (*word);
        a = a * b;
    }

    return hash;
} 
无符号整数散列(const char*word);
int main(int argc,char*argv[])
{
//如果命令行中缺少字符串名称,则返回错误
如果(argc!=2)
{
printf(“用法:./recover.c字符串名称\n”);
返回1;
}
int i=散列(argv[2]);
printf(“%i\n”,i);
}
无符号整数散列(const char*word)//RS散列函数
{
无符号整数b=378551;
无符号整数a=63689;
无符号整数散列=0;
无符号整数长度=strlen(字);
无符号整数i=0;
对于(i=0;i

提前感谢您的任何见解!知道我的错误在哪里会很有帮助

我相信@Mat已经知道了:


分段故障是由于您的argc状况造成的。如果将条件更改为(argc提示:如果
argc==2
,则
argv
的唯一可用索引是0和1。这是一个多么愚蠢的错误。感谢您的标记!