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_equalがあります。g_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 に答える