我正在尝试对像这样初始化的字符串数组进行排序。
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/