Categories:
.NET (357)
C (330)
C++ (183)
CSS (84)
DBA (2)
General (7)
HTML (4)
Java (574)
JavaScript (106)
JSP (66)
Oracle (114)
Perl (46)
Perl (1)
PHP (1)
PL/SQL (1)
RSS (51)
Software QA (13)
SQL Server (1)
Windows (1)
XHTML (173)
Other Resources:
I am trying to sort an array of strings with qsort, using strcmp as the comparison function, but it is not working.
I am trying to sort an array of strings with qsort, using strcmp as the comparison function, but it is not working.
✍: Guest
By ``array of strings'' you probably mean ``array of pointers to char.'' The arguments to qsort's comparison function are pointers to the objects being sorted, in this case, pointers to pointers to char. strcmp, however, accepts simple pointers to char. Therefore, strcmp can't be used directly. Write an intermediate comparison function like this:
/* compare strings via pointers */
int pstrcmp(const void *p1, const void *p2)
{
return strcmp(*(char * const *)p1, *(char * const *)p2);
}
The comparison function's arguments are expressed as ``generic pointers,'' const void *. They are converted back to what they ``really are'' (pointers to pointers to char) and dereferenced, yielding char *'s which can be passed to strcmp.
The call to qsort might look like
#include <stdlib.h>
char *strings[NSTRINGS];
int nstrings;
/* nstrings cells of strings[] are to be sorted */
qsort(strings, nstrings, sizeof(char *), pstrcmp);
2015-08-12, 1385👍, 0💬
Popular Posts:
How To Use mysqlbinlog to View Binary Logs? - MySQL FAQs - Server Daemon mysqld Administration If yo...
How do you override a defined macro? You can use the #undef preprocessor directive to undefine (over...
How to create arrays in JavaScript? We can declare an array like this var scripts = new Array(); We ...
What is AL.EXE and RESGEN.EXE? In the previous question you have seen how we can use resource files ...
What is the difference between "printf(...)" and "sprintf(...)"? sprintf(...) writes data to the cha...