我无法通过g_hash_table_look_up()获得结果

时间:2013-08-17 15:31:18

标签: c linux hashtable lookup glib

我想使用字符串作为键,并找到我的值,我的值必须是指针。

#include <stdio.h>
#include <glib.h>
int main()
{
  GHashTable *hash_list; ///denfine my hashtable
  char str1[32];
  sprintf(str1, "key");
  char str2[32];
  sprintf(str2, "key");
  hash_list = g_hash_table_new(g_str_hash, g_direct_equal); ///create my hashtable
  g_hash_table_insert(tcp_stream_list, str1, "ssssssssssssssss"); ///insert my key and value
  char *c = (char*) g_hash_table_lookup(tcp_stream_list, (str2)); ///find my key
  if (c)
  {
    printf("%s\n", c);   ///print the string
  }
  return 0;
}

1 个答案:

答案 0 :(得分:1)

如果使用字符数组作为键,则在创建哈希表时必须使用g_str_equalg_direct_equal


如果使用g_direct_equal,则不比较键值指向的数组,但指针值自己。

因此对于使用g_direct_equal的哈希表(根据OP的来源),以下行将成功找到之前插入的条目(使用str1):

char * c = (char*) g_hash_table_lookup(hash_list, str1); 

但是:您可能想决定使用什么作为密钥:

  • 指针值(使用g_direct_equal
  • 字符数组的内容(g_str_equal