【发布时间】:2015-09-03 16:29:03
【问题描述】:
我有一个结构数组(员工):
typedef struct Employee{
char name[MAX_SIZE];
int salary;
int experience;
} employee_t;
我想按薪水重新排序我的数组,我创建了一个比较器:
int compareEmployeesBySalary(const void* a, const void* b){
employee_t* one = (employee_t*)a;
employee_t* two = (employee_t*)b;
if (one->salary == two->salary)
return 0;
else if (one->salary > two->salary)
return 1;
else
return -1;
}
void main()
{
int i;
employee_t** employeeArray = (employee_t**)malloc(sizeof(employee_t*)*5);
for(i=0 ; i < 2 ; i++)
{
employeeArray[i] = (employee_t*)malloc(sizeof(employee_t));
readEmployee( employeeArray[i] ); //input for 5 employee's
}
puts("");
puts("beforesort\n");
for(i=0; i <2 ; i++)
{
printEmployee(employeeArray[i]);
}
puts("--------------------------------------------------------");
puts("after salary sort\n");
qsort(&employeeArray, 2, sizeof(employee_t), compareEmployeesBySalary);
for(i=0; i < 2 ; i++)
printEmployee( employeeArray[i] );
}
当我正常运行它时,它只是按我插入员工的顺序打印原始数组,但是当我调试它时,它通过我的比较函数打印, 这是为什么呢?
谢谢!!!
【问题讨论】:
-
您可能运行的是过时的发布版本二进制文件,而调试版本每次都会重新构建。
-
qsort(&employeeArray…看起来不对。那不应该是qsort(employeeArray…吗? -
@Eugene Sh 我解决了吗?
-
但是当我调试它时,它会通过我的比较功能打印出来——你是什么意思?是不是,如果你放断点,代码就可以工作?
-
是否也要重新构建发布版本?