2013-08-17 2 views
0

Я хочу использовать строку для ключа и найти свое значение, мое значение должно быть указателем.Я не могу получить результат с g_hash_table_look_up()

#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; 
} 
+0

Интересный способ инициализации массива символов. – alk

+0

'tcp_stream_list' должен быть' hash_list', не так ли? – alk

+0

Я был назначен, вы пытались отредактировать мой ответ. Но редактирование было отклонено. Вы могли бы подумать **, комментируя ** свой ответ. – alk

ответ

1

При использовании символов массивы в качестве ключей вы должны использовать g_str_equal но g_direct_equal при создании хэш-таблицы.


При использовании g_direct_equal не массивы, на который указывает значение ключа сравниваются, но значения указателя themselfs.

Так что для хэш-таблицы, используя g_direct_equal (в соответствии с источником операционного в) следующую строку будет успешно найти запись, вставленный ранее (с использованием str1):

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

Однако: Просто хотели бы решить что вы хотите использовать в качестве ключа:

  • значение указателя (используйте g_direct_equal)
  • содержание массива символов (g_str_equal)
Смежные вопросы