You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编写按名称首字符排序的比较函数 代码运行终止无输出问题

问题原因
  • 核心错误出在compare1比较函数的指针转换逻辑
    你定义的str是char[3][10]类型的二维字符数组,它的每个元素是长度为10的连续字符空间,不是独立的char*指针。qsort调用时传入比较函数的a、b参数,是指向数组元素首地址的指针,对应类型为char (*)[10]。
    你当前写的*(char**)a是把传入的指针强制转成二级字符指针再解引用,相当于把字符数组里存储的字符串内容当成内存地址去访问,直接触发非法内存访问,导致程序崩溃无输出。
修复方案

仅需要修改compare1函数的转换逻辑即可:

int compare1(const void *a,const void *b)
{
    // 直接把指针转成char*,指向当前待比较的字符串首地址
    const char *c = (const char*)a;
    const char *d = (const char*)b;
    return c[0] - d[0];
}

补充说明:只有当你要排序的是char*类型的指针数组(比如char *str[] = {"abc", "def", "ghi"})时,才需要用*(char**)a的写法解引用拿到字符串指针,二维字符数组和指针数组的内存布局完全不同,不能混用转换逻辑。

内容的提问来源于stack exchange,提问作者Hash include

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:18:04