【发布时间】:2015-09-16 13:16:04
【问题描述】:
我正在尝试对二维数组进行排序。首先我按列排序,然后按行排序。逐列有效,但逐行无效。这段代码有什么问题?
int scmpr (const void *a, const void *b){
return strcmp((const char*)a, (const char*)b);
}
int main(void){
int i,j;
char **tab;
tab=(char**)malloc(sizeof(char*)* 10);
for(i=0; i<10; i++){
tab[i]=(char*)malloc(sizeof(char)*15);
}
for(i=0; i<10; i++){
for(j=0; j<15; j++){
tab[i][j]=rand()%20+'b';
printf("%c ", tab[i][j]);
}
puts("");
}
for (i = 0; i<10; i++){
qsort(&tab[i][0], 15, sizeof(char), scmpr);
}
qsort(tab, 10, sizeof(char), scmpr); //<-- doesn't work
for(i=0; i<10; i++){
for(j=0; j<15; j++){
printf("%c ", tab[i][j]);
}
puts("");
}
puts("");
return 0;
}
【问题讨论】:
-
停止转换为
malloc这不是 C++。 -
每一行在这里排序:ideone.com/IhUAFV
-
@Krasnal 首先,数组中的所有字符串都不是以零结尾的,这个调用 qsort(&tab[i][0], 15, sizeof(char), scmpr);没有意义。
标签: c sorting quicksort ansi qsort