[英]Getting Segmentation fault when using qsort for sorting array of strings in C
我正在尝试对这样初始化的字符串数组进行排序。
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是我数组中元素的正确数量。 但是,当我尝试运行代码时遇到了段错误。 谁能告诉我为什么?
您将错误的大小传递给qsort
。
qsort(que, size, sizeof(char *), compfunc);
^^^^^^^^^^^^^^
它应该是:
qsort(que, size, sizeof(que[0]), compfunc);
请记住, &q[0]
和&q[1]
之间的数值差为100
,与sizeof(q[0])
。
另外,要学究, compfun
的指针类型必须为char (*)[100]
,而不是char**
。 毕竟, q
衰减为char (*)[100]
类型的指针。
int compfunc(const void * a, const void * b){
const char (*ia)[100] = (const char (*)[100])a;
const char (*ib)[100] = (const char (*)[100])b;
return strcmp(*ia, *ib);
}
即使您拥有的东西也可以工作。
段故障是由于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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.