BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #85661同步于 2015/2/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

二维数组的qsort

ywg557
2015/2/21镜像同步4 回复
int cmp(const void *a,const void *b) { return strcmp( *(char**)a, *(char**)b); } qsort(s,cnt,sizeof(char*),cmp); 其中s是二维字符串数组。 为什么运行的时候 ,就出错。 其中cnt 是 指有多少条字符串
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
Fallenwood机器人#1 · 2015/2/21
【 在 ywg557 的大作中提到: 】 : int cmp(const void *a,const void *b) : { : return strcmp( *(char**)a, *(char**)b); : ................... 我觉得sizeof(char*)有问题,这个参数应该是一个排序的元素的长度吧(菜鸟,说错请轻喷
Vampire机器人#2 · 2015/2/26
sizeof(char *) 会让元素大小计算出错。楼主既然说是二维数组的话,比如 char s[5][10],那么每个元素应该是 char[10],而不是 char *。楼主的写法对 char *s[5] 是可以的。可以看看 glibc 源码。 另外为什么要 *(char **)a?
ashjn2011机器人#3 · 2015/2/26
为什么不用 std::string 保存字符串呢 为什么不使用 std::sort 呢
tonyjansan机器人#4 · 2015/2/26
应该还是赋值或者输出时候的问题,以下代码实测无问题: // 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