qsort函数排序字符串的问题
#include<stdio.h>#include<stdlib.h>intcmp(constvoid*a,constvoid*b){return*(char*)a-*(...
#include <stdio.h>
#include <stdlib.h>
int cmp( const void *a , const void *b )
{
return *(char *)a - *(int *)b;
}
int main()
{
char a[]="abcde";
qsort(a,5,sizeof(a[0]),cmp);
puts(a);
return 0;
}
排序输出的是bcdea不应该是字典序排列么? 展开
#include <stdlib.h>
int cmp( const void *a , const void *b )
{
return *(char *)a - *(int *)b;
}
int main()
{
char a[]="abcde";
qsort(a,5,sizeof(a[0]),cmp);
puts(a);
return 0;
}
排序输出的是bcdea不应该是字典序排列么? 展开
展开全部
就这个程序而言,只要把int cmp(const void *a, const void *b)函数里的*(int *)b改成*(char *)b就可以运行得到想要的结果。不过我推荐的写法是
int cmp(const void *a, const void *b)
{
return *(const char *)a - *(const char *)b;
}
题主写法下运行结果错误的原因是:int占4个字节而char占1个,举个例子,如果b指向的内存块的存储情况为0000 0001 0000 0000 0000 0000 0000 0000,已知一个字节占8位,那么*(char *)b的值为1,而*(int *)b的值为2^24,这会导致最终的比较结果出现错误。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询