0

ハッシュテーブルから引き出した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と、ハッシュ テーブルが空であるかのように動作することです。何がこれを引き起こしているのでしょうか?

4

0 に答える 0