How to use qsort for an array of strings?

前端 未结 3 2011
傲寒
傲寒 2021-01-15 04:45
#include 
#include 
#include 

int sortstring(const void *str1, const void *str2) {
    const char *rec1 = str1;
    c         


        
3条回答
  •  刺人心
    刺人心 (楼主)
    2021-01-15 05:39

    Your comparator is being sent each pair by-address. I.e. they're pointer-to-pointer-to-char.

    Change the comparator to:

    int sortstring( const void *str1, const void *str2 )
    {
        char *const *pp1 = str1;
        char *const *pp2 = str2;
        return strcmp(*pp1, *pp2);
    }
    

    Likewise, your sortutil needs to know the number of items being sorted, as well as pass the correct size of each item. Change that to:

    void sortutil(char* lines[], int count)
    {
        qsort(lines, count, sizeof(*lines), sortstring);
    }
    

    Finally, the call from main() should look like this:

    sortutil(arr, numlines);
    

    That should do it.

提交回复
热议问题