c - 在C中对char指针数组进行排序

标签 c sorting char

我正在尝试对 char 指针数组进行排序,为此我使用了 qsort 函数,但我无法理解我做错了什么以及如何对该数组进行排序。

int StringCompare( const void* a, const void* b)
{
    char const *char_a = (char const *)a;
    char const *char_b = (char const *)b;

    return strcmp(char_a, char_b);
}

int main() {
    char *a[] = { "Garima",
          "Amit",
          "Gaurav",
          "Vaibhav"
        };

    int n;

    qsort( a, 4, sizeof(char*), StringCompare);
    for (n=0; n<4; n++)
        printf ("%c ",*a[n]);
}

输出是:G A G V

最佳答案

问题是传递给排序函数(也称为 StringCompare)的值是指向 a 数组的指针。换句话说,它们是 const char ** 类型。

您需要将 char_achar_b 声明为 const char **,并在对 strcmp< 的调用中取消引用它们:

int StringCompare( const void* a, const void* b)
{
    char const **char_a = a;
    char const **char_b = b;

    return strcmp(*char_a, *char_b);
}

另请注意强制转换是不必要的。

关于c - 在C中对char指针数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18232771/

相关文章:

c - 将 char 指针数组传递给 C 中的函数?

c - 使节点的混合大小写值全部小写(C)

c - 如何通过数组使用 MPI 分散和聚集

c++ - FSM 在 C++ 中使用成员函数指针

c - 'private' 是 C 关键字吗?

iphone - tableView 中疯狂的数组排序! sortedArrayUsingSelector 帮助?

c# - char** DllImport 失败

c - 将数组重新排列成表以打印到文本文件中

c# - 对存储过程的结果进行排序

sorting - 格式列表 : sort properties by name