这样使用qsort函数对吗?为什么调用后不起作用
#include
#include
#include
#define WORD_LEN 20
#define P_NUM 10
int read_line(char s[],int n);
int compare_str(const void *p,const void *q);
int main(void)
{
char word[WORD_LEN];
char *str[P_NUM];
int n,i=0,num_remind=0;
for(;;){
if(num_remind==P_NUM){
printf("No space left");
break;
}
printf("Enter word:");
n=read_line(word,WORD_LEN);
if(n==0)
break;
str[i]=malloc(strlen(word)+1);
if(str[i]==NULL){
printf("No space left.\n");break;
}
strcpy(str[i],word);
num_remind++;i++;
}
qsort(str,num_remind,strlen(word),compare_str);
//str是待排序数组
//num_remind是数组元素的个数
//strlen(word)是元素(存放字符串的字符数组)的大小
//compare_str是比较函数
for(i=0;i<num_remind;i++)
printf(" %s\n",str[i]);
return 0;
}
int read_line(char s[],int n)
{
int ch,i=0;
while((ch=getchar())!='\n')
if(i<n)
s[i++]=ch;
s[i]='\0';
return i;
}
int compare_str(const void *p,const void *q)
{
return strcmp((const char *)p,(const char *)q);
}
输出后还是原顺序
功 能: 使用快速排序例程进行排序
头文件:stdlib.h
用 法:_CRTIMP void __cdecl qsort(void*, size_t, size_t,int (*)(const void*, const void*));[1]
参数: 1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
你用的qsort(str,num_remind,strlen(word),compare_str);
应该是给字符串排序吧
那么第三个参数应该是字符串首地址的大小,不是strlen(word)应该是sizeof(char*)吧
不知道对不对,你试下
qsort(str,num_remind,sizeof(char*),compare_str);
int compare_str(const void p,const void *q)
{
return strcmp( (char * const *) p, * (char * const *) q);
}
看下man手册,上面有完整的例子
第三个参数应该是 sizeof(char)