gpt4 book ai didi

c - g_array_sort 不适用于字符串

转载 作者:行者123 更新时间:2023-11-30 15:14:57 25 4
gpt4 key购买 nike

如何在 C 中对字符串使用 g_array_sort ?我的代码使用比较字符串,但无法获取数据

int porownanie(gpointer a, gpointer b)
{
char *str_a = (char *)a; char *str_b = (char *)b;
printf("[%s:%s]=%d\n",str_a,str_b,g_ascii_strcasecmp(str_a,str_b));
return strcmp(str_a,str_b);
}

主要功能

GArray* t = g_array_new(FALSE, FALSE, sizeof(char*));
char* a = "a", *b = "c", *c = "d"....
g_array_append_val(t, a);....

prt(t);printf("Sortujemy\n"); g_array_sort(t, (GCompareFunc)porownanie);
prt(t); printf("Porownanie %d\n",porownanie((char *)"a",(char *)"b"));

我明白了:

Tablica: b a f c d  
[z_:t_]=6
[v_:x_]=-2
[|_:v_]=6
[|_:x_]=4
[t_:v_]=-2
[z_:v_]=4
[z_:x_]=2
[z_:|_]=-2
Tablica: a c d b f
[a:b]=-1 Porownanie -1

我没有从 g_aray_sort 获取 char*,我得到随机数据

最佳答案

排序函数接收一个指向要排序的项的指针,而不是值本身。你需要类似的东西

int porownanie(gpointer a, gpointer b)
{
char **str_a = (char **)a; char **str_b = (char **)b;
printf("[%s:%s]=%d\n",*str_a,*str_b,g_ascii_strcasecmp(*str_a,*str_b));
return strcmp(*str_a,*str_b);
}

FWIW,这里的基本原理是这些项目可以是任何东西,包括您不想复制的大型结构......想想如果您有一个数组会发生什么

struct Foo {
guint8 input_buffer[4096];
guint8 output_buffer[4096];
}

事实上,对于字符串,您通常会使用 GPtrArray,而不是 GArray。排序函数仍然需要 char** 参数(因为 GPtrArray 实际上只是 GArray 的一个便利 API),但它假设值是 sizeof(void*) 并使 API 更易于使用。

关于c - g_array_sort 不适用于字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33811127/

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