c - 使用 qsort 对 C 中的字符串数组进行排序时出现段错误

标签 c arrays segmentation-fault qsort

我正在尝试对像这样初始化的字符串数组进行排序。

char que[100][100];

这是我的比较函数

int compfunc(const void * a, const void * b){
    const char **ia = (const char **)a;
    const char **ib = (const char **)b;
    return strcmp(*ia, *ib);
}

这是我正在调用的 qsort

qsort(que, size, sizeof(char *), compfunc);

size 是数组中正确的元素数量。 但是当我尝试运行代码时遇到段错误。 谁能告诉我为什么?

最佳答案

seg 错误是由于 compfunc 函数造成的

int compfunc(const void * a, const void * b){
    const char **ia = (const char **)a;
    const char **ib = (const char **)b;
    return strcmp(*ia, *ib);
}

不需要额外的(和错误的)转换来导致非指针的取消引用和段错误(实际上是未定义的行为)

int compfunc(const void * a, const void * b){
    return strcmp(a, b);
}

给你你需要的东西。

此外,正如R Sahu提到的,给qsort的元素大小也是错误的,它应该是你想要比较(和排序)的元素之一的大小,即例如 que[0] 的大小,或 *que

qsort(que, size, sizeof(*que), compfunc);

关于c - 使用 qsort 对 C 中的字符串数组进行排序时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33774013/

相关文章:

java - Java 引用书目程序

javascript - 如何使用 Javascript 将迭代器索引号附加到数组中的每个项目?

将值分配给结构中的地址时出现 C 段错误

c - 将值推送到结构时堆栈崩溃

c - tmpfile 中的安全漏洞是什么,tmpfile_s 是如何解决的?

c - fork() 搜索 3D 数组 C 编程

Python:从两个列表构建字典

C 列表插入程序 - 运行时出现段错误

c++ - 排序 vector 时出现段错误

c - 令人惊讶的指针