Ryan D. Ryan D. - 1 year ago 64
C Question

Hash function issue - adding functionality

I tried adding functionality to the djb2 hash function, but it doesn't appear to like the changes. Specifically, I'm trying to include a loop that converts words (strings) to lower case. It throws the following two errors:

  1. Incompatible integer to pointer conversion assigning to
    char *

  2. Cannot increment value of type
    char *[45]

Note that in the original code
appeared in the
loop. This is my first hash table, and I'm rather shaky on pointers. Any insight on where I've gone wrong would be appreciated.

// djb2 by Dan Bernstein -- slightly modified;
unsigned int hash_function(const char* str)
unsigned int hash = 5381;
int c;
char* string[45];

for (int i = 0; str[i] != '\0'; i++)
string[i] = (tolower(str[i]));

while (c == *string++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */

return (hash % LISTS);

Answer Source


char* string[45];

means "array of 45 character pointers", you should drop the asterisk.

And you can't iterate over an array by incrementing the variable, the array variable cannot be changed. You can use a separate pointer:

const char *s = string;
while (c = *s++)

Note that assignment is spelled =, while == is comparison for equality which is not what you mean.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download