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

C语言使用qsort按字符串首字符排序时代码终止无输出问题排查

问题原因
  • 核心错误为qsort函数的第三个参数配置错误:你定义的str是char*类型数组,每个数组元素的本质是指向字符串的指针,因此每个元素的大小为指针占用的字节数,而非你填写的10。错误的元素大小会导致qsort计算内存偏移时出错,访问非法内存触发段错误,最终程序直接终止无输出。
  • 比较函数的逻辑本身是正确的,无需修改。
修正方案

仅需要将qsort调用行修改为:

qsort(str, 3, sizeof(char*), compare1);
完整可运行代码
#include<stdlib.h>
#include<stdio.h>
#include <stdbool.h>

int compare1(const void *a,const void *b)
{
    char *c = *(char**)a;
    char *d = *(char**)b;
    return c[0] - d[0];
}

int main()
{
    char* str[3];
    int i;
    for(i=0;i<3;i++)
    {
        str[i] = (char*)malloc(10*sizeof(char));
    }
    for(i=0;i<3;i++)
    {
        printf("Enter %d string => " , i+1 );
        scanf("%s", str[i]);
        printf("\n");
    }
    
    printf("Before sort: ");
    for(i=0;i<3;i++)
    {
        printf("%s ",str[i]);
    }
    printf("\n");
    
    // 修正qsort的第三个参数为指针大小
    qsort(str,3,sizeof(char*),compare1);
    
    printf("After sort: ");
    for(i=0;i<3;i++)
    {
        printf("%s ",str[i]);
    }
    printf("\n");

    // 补充内存释放避免泄漏
    for(i=0;i<3;i++)
    {
        free(str[i]);
    }
    return 0;
}

内容的提问来源于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:27:04