0

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

#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;
}
4

1 回答 1

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)
于 2013-08-17T16:01:32.420 回答