Используйте qsort с функцией сравнения

Я знаю qsort из библиотеки c, и я реализовал его с помощью символов и целых чисел (преобразовать из const void * form в соответствующую форму), но сейчас я реализую код, который дает мне самое длинное дублирование в данных предложениях - простая функция сравнения

int pstrcmp(char **p,char **q){
    return strcmp(*p,*q);

}

и я хочу использовать его в qsort, как это

qsort(a,n,sizeof(char *),pstrcmp);(a is array of strings)

когда я пишу напрямую, он пишет, что это несовместимо и сын, показывает ошибку, пожалуйста, помогите мне исправить это

ошибка это

2 IntelliSense: аргумент типа "int (*)(char **p, char **q)" несовместим с параметром типа "int (__cdecl *)(const void *, const void *)" c:\users\ датуашвили \ Documents\visual studio 2010\projects\duplicate_strings\duplicate_strings\duplicates_strings.cpp 32 27 duplicate_strings

1 ответ

Решение

Вы должны дать своей функции компаратора правильную сигнатуру функции, а затем выполнить внутреннее приведение, например

int pstrcmp(const void * p, const void * q)
{
    const char **ps = (const char **)p;
    const char **qs = (const char **)q;

    return strcmp(*ps, *qs);
}
Другие вопросы по тегам