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不应该是字典序排列么?
展开
 我来答
神的第12个儿子
2020-04-27 · TA获得超过329个赞
知道小有建树答主
回答量:249
采纳率:66%
帮助的人:46.5万
展开全部

就这个程序而言,只要把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,这会导致最终的比较结果出现错误。

zjfaok
推荐于2016-09-19 · TA获得超过6806个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1620万
展开全部
*(char *)a - *(int *)b

这是想干什么
追问
好吧忘了改了。。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式