为什么
void qsort(void *lineptr[],int left,int right,int (*comp)(void *,void *));
函数在调用的时候没有执行就直接跳过了?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXLINES 5000
char *lineptr[MAXLINES];
int reverse=0;
int readlines(char *lineptr[],int nlines);
void writelines(char *lineptr[],int nlines);
void qsort(void *lineptr[],int left,int right,int (*comp)(void *,void *));
int numcmp(const char *,const char *);
main(int argc,char *argv[])
{
int nlines,c;
int numeric=0;
while(--argc>0&&(*++argv)[0]=='-')
while(c=*++argv[0])
switch(c)
{
case 'n':numeric=1;
break;
case 'r':reverse=1;
break;
default:
printf("find:illegal option %c\n",c);
argc=0;
break;
}
if((nlines=readlines(lineptr,MAXLINES))>=0)
{
qsort((void **)lineptr,0,nlines-1,(int(*)(void*,void*))(numeric ? numcmp:strcmp));
writelines(lineptr,nlines);
return 0;
}
else
{
printf("input too big to sort\n");
return 1;
}
}
#define MAXLINE 1000
int getline(char *,int);
char *alloc(int);
int readlines(char *lineptr[],int maxline)
{
int len,nlines;
char *p,line[MAXLINE];
nlines=0;
while((len=getline(line,MAXLINE))>0)
if(nlines>=MAXLINE||(p=alloc(len))==NULL)
return -1;
else
{
line[len-1]='\0';
strcpy(p,line);
lineptr[nlines++]=p;
}
return nlines;
}
void writelines(char *ptrline[],int nlines)
{
int i;
for(i=0;i<nlines;i++)
printf("%s\n",lineptr[i]);
}
void qsort(void *v[],int left,int right,int (*comp)(void *,void *))
{
int i,last;
void swap(void *v[],int,int);
if(left>=right);
return;
swap(v,left,(left+right)/2);
last=left;
for(i=left+1;i<=right;i++)
if(reverse)
{
if((*comp)(v[i],v[left])>0)
swap(v,++last,i);
}
else
if((*comp)(v[i],v[left])<0)
swap(v,++last,i);
swap(v,left,last);
qsort(v,left,last-1,comp);
qsort(v,last+1,right,comp);
}
int getline(char line[],int lim)
{
int c,i;
for(i=0;i<lim-1&&(c=getchar())!='#'&&c!='\n';i++)
line[i]=c;
if(c=='\n')
{
line[i]=c;
i++;
}
line[i]='\0';
return i;
}
#define ALLOCSIZE 10000
static char allocbuf[ALLOCSIZE];
static char *allocp=allocbuf;
char *alloc(int n)
{
if(allocbuf+ALLOCSIZE-allocp>=n)
{
allocp+=n;
return allocp-n;
}
else
{
return 0;
}
}
int numcmp(const char *s1,const char *s2)
{
double v1,v2;
v1=atof(s1);
v2=atof(s2);
if(v1<v2)
return -1;
else if(v1>v2)
return 1;
else
return 0;
}
void swap(void *v[],int i,int j)
{
void *temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法