C代码
#include <glib.h>
//...
GHashTable *hash = g_hash_table_new(NULL, NULL);
GString val;
g_hash_table_insert(hash, (int*)5, g_string_new("Bar"));
val = g_hash_table_lookup(hash, (int*)5); // line 10
printf("Foo ~ %s\n", val->str); // line 16
if (NULL == val) // line 18
printf("Eet ees null!\n");
产生了:
ctest.c:10: error: incompatible types in assignment
ctest.c:16: error: invalid type argument of '->' (have 'GString')
ctest.c:18: error: invalid operands to binary == (have 'void *' and 'GString')
我做错了什么? :(
编辑:有些人可能会感到困惑并自问“她为什么不使用 g_string_printf()
?”
因为我需要访问 gchar *str
,打印只是我“调试”它的方式。
编辑:添加了第 18 行,并对令人眼花缭乱的线条进行了评论(是的,到处都是白色的痕迹。我很可怕,我知道)。
函数g_string_new
返回一个GString *
。这就是存储在哈希中的内容。函数 g_hash_table_lookup
返回一个 void *
。您可能想要这样的东西:
GString *val;
val = g_hash_table_lookup(hash, (int*)5);
printf("Foo ~ %s\n", val->str);
我是一名优秀的程序员,十分优秀!