1. Can Anyone??

Can anyone please explain me, step by step, each line of the following sorting algorithm which sorts the input lines numerically, if -n is given at the command line. (Program taken from the book "The C programming language, by brian kernighan and Dennis Ritchie" - Chapter 5. Section 5.11, page no.119)

Code:
```#include<stdio.h>
#include<string.h>

#define MAXLINES 5000;
char *lineptr[MAXLINES};

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(char *, char *);

main(int argc, char *argv[])
{
int nlines;
int numeric = 0;

if(argc > 1 && strcmp(argv[1],"-n") == 0)
numeric = 1;
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 short\n");
return 1;
}
}```

what does this line mean..."qsort((void **)lineptr, 0, nlines-1,(int (*)(void*, void*))(numeric ? numcmp : strcmp);"

.
.
.

2. Originally Posted by juice
what does this line mean..."qsort((void **)lineptr, 0, nlines-1,(int (*)(void*, void*))(numeric ? numcmp : strcmp);"
It's a call to qsort:

qsort

But I'm guessing it is from before a point when qsort() was standardized, because the parameters are wrong. The first arg is still the array to sort, but it looks as if the 3rd arg, instead of the 2nd, is the number of items in the array, the 2nd arg is just zero. There is no item size param, implying this qsort works on an array of pointers (which is what lineptr is, and the (void**) cast is also different from standard qsort. The last bit:

(int (*)(void*, void*))(numeric ? numcmp : strcmp)

Is a function pointer using the ternery operator ?, such that if "numeric" is non-zero then numcmp() will be used as the comparison function otherwise strcmp() will be used.

Popular pages Recent additions