ハッシュテーブルから引き出したchar配列を送信しようとしている小さなTCP接続があります。キーがクライアントの IP アドレスであるハッシュ テーブルに文字列を正常に追加できますが、キーの値を取得しようとすると、テーブル全体が NULL として登録されます。
ファイルは次のとおりです。
void HandleTCPClient(int clntSocket, char *client_ip, HASHTBL *hashtable)
{
...
...
if (strcmp(cmd, "addfile") == 0)
{
char arr[1000];
add = hashtbl_get(hashtable, (char *)client_ip);
if (add != NULL)
{
memcpy(fls, add, strlen(add));
hashtbl_insert(hashtable, client_ip, fls);
}
else
{
hashtbl_insert(hashtable, client_ip, fls);
printf("insert done\n");
}
printf("%s\n", hashtbl_get(hashtable, (char *)client_ip));
}
else if (strcmp(cmd, "listfiles") == 0)
{
char list[1000];
char *test;
printf("before getting from hashtable");
test = hashtbl_get(hashtable, (char *)client_ip);
printf("%s\n", test);
}
値を取得するために呼び出している関数にhashtbl_get
は、ヘッダーがあります。
void *hashtbl_get(HASHTBL *hashtbl, const char *key);
(char *)
そのため、渡すときにclient_ip を としてキャストします。
fls
小さな文字配列です
hashtbl_get
関数は次のとおりです。
void *hashtbl_get(HASHTBL *hashtbl, const char *key)
{
struct hashnode_s *node;
hash_size hash=hashtbl->hashfunc(key)%hashtbl->size;
node=hashtbl->nodes[hash];
while(node) {
if(!strcmp(node->key, key)) return node->data;
node=node->next;
}
return NULL;
}
問題は、サーバーを実行してaddfile
コマンドを呼び出すと、ハッシュ テーブルに追加されますが、呼び出すlistfiles
と、ハッシュ テーブルが空であるかのように動作することです。何がこれを引き起こしているのでしょうか?