返回信息流int cmp(const void *a,const void *b)
{
return strcmp( *(char**)a, *(char**)b);
}
qsort(s,cnt,sizeof(char*),cmp);
其中s是二维字符串数组。
为什么运行的时候 ,就出错。
其中cnt 是 指有多少条字符串
这是一条镜像帖。来源:北邮人论坛 / cpp / #85661同步于 2015/2/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
二维数组的qsort
ywg557
2015/2/21镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 ywg557 的大作中提到: 】
: int cmp(const void *a,const void *b)
: {
: return strcmp( *(char**)a, *(char**)b);
: ...................
我觉得sizeof(char*)有问题,这个参数应该是一个排序的元素的长度吧(菜鸟,说错请轻喷
sizeof(char *) 会让元素大小计算出错。楼主既然说是二维数组的话,比如 char s[5][10],那么每个元素应该是 char[10],而不是 char *。楼主的写法对 char *s[5] 是可以的。可以看看 glibc 源码。
另外为什么要 *(char **)a?
应该还是赋值或者输出时候的问题,以下代码实测无问题:
// strsort.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 10
#define N 10
int cmp(const void *a,const void *b) {
return strcmp(*(char**)a, *(char**)b);
}
int main() {
char** ss = (char**)malloc(M * sizeof(char*));
int m = 0;
for(; m < M; m++) {
ss[m] = (char*)malloc(N * sizeof(char));
ss[m][0] = 'z' - m, ss[m][1] = '\0';
printf("%s\t", ss[m]);
}
printf("\n");
qsort(ss, M, sizeof(char*), cmp);
for(m = 0; m < M; m++) {
printf("%s\t", ss[m]);
free(ss[m]);
}
printf("\n");
free(ss);
return 0;
}
输出结果:
z y x w v u t s r q
q r s t u v w x y z