gpt4 book ai didi

c - 如何将数据从 GHashTable 存储到 C 中的结构

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:36 25 4
gpt4 key购买 nike

我正在尝试遍历我的哈希表并将键和值存储到一个结构数组中。我不断遇到段错误。我猜是由于基于指针的结构。

当我应该使用指向结构的指针和结构数组时,我仍然感到困惑。

编辑:让它工作。请参阅下面的答案。

最佳答案

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <glib.h>

typedef struct st {
char *key;
char *str;
int len;
} MyStruct;

int z = 0;
static void hash2struct (gpointer key, gpointer value, gpointer data) {
MyStruct **s = data;
gchar *k = (gchar *) key;
gchar *h = (gchar *) value;
s[z]->key = strdup(k);
s[z]->str =strdup(h);
z++;
}

int main(int argc, char *argv[]){
int i;

GHashTable *hash = g_hash_table_new(g_str_hash, g_str_equal);

g_hash_table_insert(hash, "Virginia", "Richmond");
g_hash_table_insert(hash, "Texas", "Austin");
g_hash_table_insert(hash, "Ohio", "Columbus");

MyStruct **s = malloc(sizeof(MyStruct) * 3);
for(i = 0; i < 3; i++) {
s[i] = malloc(sizeof(MyStruct));
}
g_hash_table_foreach(hash, hash2struct, s);

for(i = 0; i < 3; i++)
printf("%s %s\n", s[i]->str, s[i]->key);

for(i = 0; i < 3; i++) {
free(s[i]->str);
free(s[i]->key);
free(s[i]);
}
free(s);
g_hash_table_destroy(hash);
return 0;
}

关于c - 如何将数据从 GHashTable 存储到 C 中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13782997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com