我正在尝试对 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_a
和 char_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/