struct - 使用qsort对c-string进行排序

Jos*_*osh 2 c sorting struct

我正在排序一堆IP,但由于某种原因,它们的顺序错误.我不太确定问题出在哪里.

66.249.71.3      
190.148.164.245  
207.46.232.182   
190.148.164.245  
190.148.164.245  
202.154.114.253
190.148.164.245  
190.148.164.245  
66.249.71.3      
190.148.164.245  
202.154.114.253
Run Code Online (Sandbox Code Playgroud)

这是我对它们进行排序的方式.

typedef struct {
    char *ip;
} mystruct;

/* qsort */
int struct_cmp(const void *a, const void *b)
{
    mystruct *ia = (mystruct *)a;
    mystruct *ib = (mystruct *)b;
    return strcmp(ia->ip, ib->ip);
} 
...
qsort(a_struct, 11, sizeof(mystruct*), struct_cmp);
for(..){
    printf("%s\n",a_struct[i]->ip);
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将是欣赏它.谢谢

sth*_*sth 7

你有一个指向mystructs 的指针数组,但是qsort这个比较函数会期望一个简单的mystructs 数组.要对数组进行排序,mystruct*需要在比较函数中添加另一级别的间接:

int struct_cmp(const void *a, const void *b) {
    mystruct *ia = *(mystruct **)a;
    mystruct *ib = *(mystruct **)b;
    return strcmp(ia->ip, ib->ip);
}
Run Code Online (Sandbox Code Playgroud)