qsort



  • Versuche schon seit geraumer Zeit zu verstehen, wie man ein Array mittels qsort sortieren kann. Leider zeigen die Zeiger immer auf falsche Speicherbereiche. Was ist falsch an meinen qsort Parametern ?

    int sortiere(const void* a,const void* b)
    {
      return(strcmp(*(char**)a,*(char**)b));
    }
    
    int main(void)
    {
      char Array[][2] = {"c","d","a","x"};
      int i;
    
      qsort(Array,4,sizeof(char[2]),sortiere);
      for(i=0;i<=3;i++)
      {
        printf("%s\n",Array[i]);
      }
      return(0);
    }
    

    Mfg MGI



  • Ich würde das so schreiben:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int vergleich(const void* a,const void* b)
    {
      return strcmp(*(char**)a,*(char**)b);
    }
    
    #define n_elements(x) (sizeof x / sizeof *x)
    
    int main(void)
    {
      char* Array[] = {"c","d","a","x"};
      int i;
    
      qsort(Array, n_elements(Array), sizeof *Array, vergleich);
      for(i = 0; i < n_elements(Array); ++i)
      {
        printf("%s\n",Array[i]);
      }
      return 0;
    }
    

    Der Trick ist einfach, dass Du die Zeiger umsortieren lässt. Wenn Du eine ausführlichere Erklärung willst, frag einfach nochmal.^

    EDIT: schönerer Programmcode 🙂

    [ Dieser Beitrag wurde am 22.12.2002 um 17:26 Uhr von mady editiert. ]



  • Danke für die schnelle Hilfe! Funktioniert einwandfrei.
    Die letzten 3 Parameter die Du in der qsort Funktion angegeben hast leuchten mir ein. Beim ersten Parameter habe ich noch einen Klemmer. Einen Zeiger auf das erste Element im Array. Die Anfangsadresse eines Arrays zeigt doch eigentlich auf das erste Element. Muß mir das wohl mit dem Debugger noch etwas genauer ansehen.

    Mfg MGI


Anmelden zum Antworten