c - 解读 qsort 行为

标签 c qsort

我的程序需要 qsort 的功能才能运行,但到目前为止还没有完成它的工作。

我实际上是在对单个字符值的数组进行排序,以便将它们分组,这样我就可以遍历数组并确定每个属性的计数。我的问题是 qsort 返回一个“已排序”数组作为

xxxxxbxbbbxfbxfbffffbxfxbbfbbbxxfxbxxfbbbbxbfxbxfbxbsxbbbxxbbxxffxbxfxfxbxxbxxfbbbfbxbbx
bbbsxfxbxbxxbfbfxbxxbxxbfxxbxsbfxxfxfxfffxbfxffbbfffsxsfbfbxbxbbbxxsbfbfbbbbbbxxfxfxffxf
xbxxbxfxbfbxbxxbxbxxbxbbffxxbxxffxxbxfxbxffxfsfxxfxxfxxfxfxxfxxbsxxbbbxsxxbbxxxbxfxsbxxx
ffbxfxxffbxxxfxxfxxfxfxxfffbxxxbxxxfffxsbbfffffxxxbbfxsbffxbxxfxbxxfbbfsbffsfffxfxfxbbffx
bxxfxbxxfxbbbfxxbbfxxbbbsxbxfbfbbxxbbfffxxfxxbbbfxxbxxxbbxxxbfxffxxxffxfxxffbxfsxbxxxfxfx
fsbbbxxxbfxfffsfxxxfssxxxfxfxxxxbxbbbxxbxxxxxxxxxxxxxxxxxxxfbfxxffxxbxxxxxxxsxsxxxxxxxxsxb
bxxxxxfxbxxxxfxxfxxxxxbbxfffbxbsxffbbbxsfbbfffbxbfbbxxbxxbbxxbffxfxxfxfbbxxbxfxxsfxxfxxbxf
xxbxxxbxbxbbxbbffxxxxbfbfxxxxxxfxffxxxxxxxxxxxxxxxxxxxxxbxffxbxbxbbxbbxxfbxfxbxxbxxbxbxxxb
xxbxbxbfbbffffffsbbxxbffbxfxxfxbfbfffsxbxxxsxxbbbbbxxxbxxxfxxfffxxxxxxxxxxxxxfxxbxxxxxxxxx
xxbfbxxxxxxxxxxxxxxxxxxxxxxxxxxbxbxxxxxfxxbxxxxffxbxxxxffxfbfffxbxxfxbfxbxxfxbxbfxxxxxfxbx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsbxxxxffxfxxxxxxxxxfxfxxxbffffxxxfbxbxfxxxxxxxxxxxxxxxxxxxxf
fxfxbfxxxfxxxxx

我认为问题与我的函数调用或比较方法有关。

int compare(const void *a, const void *b){
  return *(char * const *) a - *(char * const *) b;
}

并用于

qsort(temp, lineCount, sizeof(char), compare);

其中 temp 是上面的字符数组,lineCount 是数组中的字符数。阵列的完整性和大小均已通过测试验证。

非常感谢任何帮助。

最佳答案

char * const * 是指向char的指针。您只需要一个指向 char 的指针。

尝试:

int compare(const void *a, const void *b){
    return *(const char *) a - *(const char *) b;
}

此外,根据定义,sizeof(char) 始终等于 1。所以一些 C 程序员永远不会那样写出来。 (它是否使代码更易于阅读或只是表示您并不真正了解该语言,这是一个见仁见智的问题。在这种情况下我碰巧喜欢它,但仅供引用。)

关于c - 解读 qsort 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382853/

相关文章:

c - 下面的代码在 C 中做了什么?

C ascii 到 hex 代码

c - 将 getcwd 存储在函数的结构上

c - 根据日期和时间元素对结构进行排序

c++ - 将 vector 与 qsort() 一起使用

c - 需要左值作为递增操作数

c - Qsort 按字母顺序排列的字符串数组

c - qsort() 对一个字符串数组进行排序,但在另一个字符串数组上出现段错误

c - qsort 在使用 "a > b"作为比较器时意外工作

c - 事件系统中的空指针