这样使用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);
}

输出后还是原顺序

c

3个回答

功 能: 使用快速排序例程进行排序

头文件: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)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!