c - C : compare Strings 中的 qsort

标签 c pointers qsort

<分区>

我有以下问题: 我在 qsort 中的比较函数如下所示:

static int compare(const void *arg1, const void *arg2) {
    return strcmp((const char *) arg1, (const char *) arg2);
}

这行不通,所以我查阅了手册页中的代码示例并稍微更改了它,现在它看起来像这样:

static int compare(const void *arg1, const void *arg2) {
    return strcmp( *(char * const *) arg1, *(char * const *) arg2);
}

我不明白为什么手册页的方法有效,因为 strcmp 的参数是 const char *s1 和 const char *s2。

我对 C 还很陌生,所以我觉得很难理解这一点。有人可以向我解释一下为什么只有手册页的方法有效。

最佳答案

对您问题的简洁回答是传递给比较函数的指针不是 char * 而是 char **

如果您考虑一下,如果您正在对一个整数数组进行排序,您将被传递给两个 int * 值(伪装成 void *)。如果您正在对 double 组进行排序,则会向您传递两个 double * 值;如果您正在对字符串数组进行排序,则会向您传递两个指向字符串的指针,这意味着两个 char ** 值。

关于c - C : compare Strings 中的 qsort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20113143/

相关文章:

c - 这两个命令行有什么区别? (段错误)

c - 为什么我使用 __EXPORT_SYMBOL 时只得到一个部分

c - 我的简单程序中的 "value is neither array nor pointer nor vector"

c++ - 如何将比较器 a-la std::less 传递给 C 风格的 Qsort?

c - C 中的 qsort() 用于 char 指针数组

Codevision 生成 `.ASM` 输出

c++ - 将 ListView 控件滚动到特定项目

String 到 PAnsiChar 转换麻烦

c - 为什么字符串数组中的 "Hello"的大小为 4?

c - gcc 为 qsort 生成警告