Wie kann man ein Array von Zeigern nach char in C sortieren?

Angenommen, ich habe ein Array von Zeigern zum Zeichnen in C:

char *data[5] = { "boda", "cydo", "washington", "dc", "obama" };

Und ich möchte dieses Array mit qsort sortieren:

qsort(data, 5, sizeof(char *), compare_function);

Ich kann die Vergleichsfunktion nicht finden. Aus irgendeinem Grund funktioniert das nicht:

int compare_function(const void *name1, const void *name2)
{
    const char *name1_ = (const char *)name1;
    const char *name2_ = (const char *)name2;
    return strcmp(name1_, name2_);
}

Ich habe viel gesucht und festgestellt, dass ich @ verwenden muss** innerhalb von qsort:

int compare_function(const void *name1, const void *name2)
{
    const char *name1_ = *(const char **)name1;
    const char *name2_ = *(const char **)name2;
    return strcmp(name1_, name2_);
}

Und das funktioniert.

Kann jemand die Verwendung von @ erklär*(const char **)name1 in dieser Funktion? Ich verstehe das überhaupt nicht. Warum der Doppelzeiger? Warum hat meine ursprüngliche Funktion nicht funktioniert?

ielen Dank, Boda Cyd

Antworten auf die Frage(16)

Ihre Antwort auf die Frage