2016-05-13 9 views
2

Ich bin auf der Suche nach einem Array von Zeichenfolgen mit der stdlib Funktion qsort.qsort zu lexigraphisch sortiere Zeichenfolgen in c

Ich habe das bevölkerungs Array: char *words[MAX_WORDS];

und eine Vergleichsfunktion:

int compare_words(const void *p, const void *q) { 
    printf("%s\n", (const char*)p); // For debugging 
    return strcmp((const char*)p, (const char*)q); 
} 

einen qsort Anruf Mit: qsort(words, i, sizeof(char*), compare_words);

ich durch den Druck kann sagen, dass ich in die eingefügt haben compare_words Funktion, die qsort nicht die richtigen Argumente an compare_words übergeben. (Es druckt Müll). Irgendwelche Ideen, warum es nicht die richtigen Zeichenzeiger bekommt?

Antwort

4

qsort übergeben Zeiger auf Ihre Array-Elemente, so erhalten Sie tatsächlich const char ** und nicht const char*.

Insbesondere druckt dieser Zeiger als Teile Ihres Eingabearrays als Text, so dass Sie offensichtlich Müll bekommen.

+3

Sie brauchen also: 'printf ("% s \ n ", * (const Char **) p); return strcmp (* (const char **) p, * (const char **) q); '! – Aconcagua

+0

Genau das, was ich brauchte. Vielen Dank –

Verwandte Themen