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

如何用qsort与strcmp对argv数组排序?我的qsort未实现排序效果

解决qsort排序命令行参数无效的问题

你的代码问题出在比较函数的类型转换错误。argv是char**类型(一个存储字符串指针的数组),qsort传给比较函数的a和b是指向数组元素的指针,也就是char**类型的指针,不是直接的char*。

原来的cmpstr函数把a和b直接转成char const*,相当于把指针的内存地址当成字符串来比较,完全偏离了要比较字符串内容的逻辑,所以排序根本不会生效。

修正后的比较函数应该这样写:

int cmpstr(const void *a, const void *b){
    // 把void*转成指向char*的指针,再解引用得到字符串指针
    char const *aa = *(char const **)a;
    char const *bb = *(char const **)b;
    
    return strcmp(aa, bb);
}

完整的修正代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int cmpstr(const void *a, const void *b){
    char const *aa = *(char const **)a;
    char const *bb = *(char const **)b;
    
    return strcmp(aa,bb);
}

int main(int argc, char * argv[]){
    qsort(argv, argc, sizeof(*argv), cmpstr);
    for(int i =0; i < argc; i++)
        printf("%s\n",argv[i]);
}

现在运行程序传入参数,就能看到正确的字符串排序结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:15:47