从不兼容的指针类型传递'qsort'的参数4 [英] passing argument 4 of 'qsort' from incompatible pointer type

查看:249
本文介绍了从不兼容的指针类型传递'qsort'的参数4的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在编写我们应该编写的函数时遇到了麻烦.据说这是应该如何工作的,但是它给了我不兼容的指针类型错误,而且我不确定如何解决它.

I'm having some trouble with a function we are supposed to be writing. Supposedly, this is how it should work, but it's giving me the incompatible pointer type error and I'm not sure how to fix it.

问题出在qsort上,它引用了compare_last函数.

The issue is in the qsort referencing the compare_last function.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_PERSONS 100

//person structure definition goes here
typedef struct{
    char last[32];
    char first[32];
    int year;
}Person;

//function declarations go here
int compare_last(Person * ptr1, Person * ptr2);

void main(void){//main function goes here
    char *infilename[20];
    char *outfilename[20];
    FILE * fptrin;
    FILE * fptrout;
    int i, j;
    Person musicians[MAX_PERSONS];
    printf("Enter input file name: ");
    scanf("%s", infilename);
    printf("Enter output file name: ");
    scanf("%s", outfilename);
    strcat(*outfilename, ".htm");
    fptrin = fopen(*infilename, "r");
    fptrout = fopen(*outfilename, "w");

    for(i = 0; i < MAX_PERSONS; i++)
    {
        fscanf(fptrin, "%s %s %i", musicians[i].last, musicians[i].first, &musicians[i].year);
    }

    qsort(musicians, i, sizeof(musicians[0]), compare_last);

    fprintf(fptrout, "<html>\n<body>\n<title>LAB14</title>\n");

    for(j = 0; j < i; j++)
    {
        fprintf(fptrout, "%s %s %i <br>", musicians[j].last, musicians[j].first, musicians[j].year);
    }

    fprintf(fptrout, "</body>\n</html>\n");
    fclose(fptrin);
    fclose(fptrout);

}//end main

//function definitions go here

int compare_last(Person * ptr1, Person * ptr2)
{
    int result = strcmp(ptr1 -> last, ptr2 -> last);
    if(result != 0)
        return result;
    else
        return strcmp(ptr1 -> first, ptr2 -> first); 
}

推荐答案

int compare_last(Person * ptr1, Person * ptr2);

应该是

int compare_last(void * ptr1, void * ptr2);

然后您需要在compare_last

这篇关于从不兼容的指针类型传递'qsort'的参数4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆