在C语言中创建一个有>1字节键和值的哈希表。

问题描述 投票:0回答:1

我试图用C语言从头开始创建一个哈希表。下面是一个有1个字节的哈希表(char*)键和值 我想做的是,除了我想让我的哈希表将键和值存储为长度不超过32个字符的字符串之外(char key[32], char value[32]). 这是我的 struct:

#define KV_SIZE 32

typedef struct hash_entry{
    char key[KV_SIZE];
    char value[KV_SIZE];
    struct hash_entry* next;
} hash_entry;

我在组建一个名为 create_entry() 因为我不知道如何分配我的。struct 字符串,键和值,到值。

// create an entry
hash_entry* create_entry(char key[KV_SIZE], char value[KV_SIZE]){
    printf("%s\n", key);
    hash_entry* entry = (hash_entry*)malloc(sizeof(hash_entry*));

    // I want entry->key and entry->value to store a string up to 32 chars long
    strncpy(entry->key, key, strlen(key)); // Error
    strncpy(entry->value, value, strlen(value)); // Error

    entry->next = NULL;

    return entry;
}

到目前为止,似乎我需要我的 entry''继续声明为指针(hash_entry* entry)而非非指针(hash_entry entry),以便以后能够链接它们。

c string struct hashtable
1个回答
0
投票
hash_entry* entry = (hash_entry*)malloc(sizeof(hash_entry));

0
投票

下面是固定我的代码的方法。

hash_entry* create_entry(char key[HASH_SIZE], char value[HASH_SIZE]){
    // No casting needed and don't use sizeof(pointer)
    // use sizeof(hash_entry) to get the full size of your struct
    hash_entry* entry = malloc(sizeof(hash_entry));

    // aside: don't forget to check the size of your strings
    if(strlen(key) < KV_SIZE && strlen(value) < KV_SIZE){
        // use strcpy instead of strncpy
        strcpy(entry->key, key);
        strcpy(entry->value, value);
        entry->next = NULL;

        return entry;
    }
    return NULL;
}
© www.soinside.com 2019 - 2024. All rights reserved.