Funktion casten
-
Hallo,
in der Suche habe ich leider nichts passendes gefunden. Ich möchte die Funktion qsort mit der Funktion strcmp als Vergleichsfunktion benutzen. Nun hat strcmp aber als Argumente const char *, allerdings erwartet qsort als Argument der Vergleichsfunktion einen void Pointer.
Mein folgender Versuch funktioniert leider nicht:
(int (*) (const void*, const void*))(strcmp))
Wie kann ich die Funktion richtig casten?
Vielen Dank für Hilfe!
-
int qsort_strcmp(const void *left, const void *right) { return strcmp(left, right); }
-
Danke, das war mir bekannt.
Ich suche nach einer Möglichkeit, die Funktion direkt im Argument der anderen Funktion zu casten. Oder geht das gar nicht?
-
qwert_zuiopü schrieb:
Oder geht das gar nicht?
So ist es.
-
Abhängig davon, ob du ein char*[] oder ein char[][N] zu sortieren versuchst, wird das unter Umständen auch so nicht funktionieren. Um ein char*[] zu sortieren, brauchst du etwas wie
int qsort_strcmp(void const *lhs, void const *rhs) { return strcmp(*(char const **)lhs, *(char const **)rhs); }
Für ein flaches 2D-Array könnte
(int(*)(void const *, void const *)(void*)strcmp
funktionieren, aber verbürgen möchte ich mich für solche Konstruktionen nicht.
-
seldon schrieb:
Für ein flaches 2D-Array könnte
(int(*)(void const *, void const *)(void*)strcmp
funktionieren, aber verbürgen möchte ich mich für solche Konstruktionen nicht.
Nein. Das mag zwar compilieren, aber denk mal darüber nach, was qsort der Sortierfunktion übergibt und was strcmp erwartet, was es bekommt.
-
Wenn es sich um ein char[][N] handelt, übergibt qsort genau das, was strcmp erwartet. Mit einem char*[] fliegt dir das natürlich auseinander, aber das hatte ich ja schon erwähnt.