qsort对字符串数组排序
#include "stdafx.h"
#include <stdio.h>
#include "stdlib.h"
#include "string.h"
char a[100][100] = {
"asdfg",
"ascwert",
};
char* b[100];
int cmpa(const void *a, const void *b)
{
char *aa = (char *)a;
char *bb = (char *)b;
return strcmp(aa, bb);
}
int cmpb(const void *a, const void *b)
{
char *aa = *(char **)a;
char *bb = *(char **)b;
return strcmp(aa, bb);
}
int main()
{
int sizeofa = sizeof(a[0]);
printf("sizeof(a[0]) = %d\n", sizeofa);
b[0] = a[0];
b[1] = a[1];
int sizeofb = sizeof(b[0]);
printf("sizeof(b[0]) = %d\n", sizeofb);
printf("a[0] = %s before comparing\n", a[0]);
printf("a[1] = %s before comparing\n", a[1]);
printf("b[0] = %s before comparing\n", b[0]);
printf("b[1] = %s before comparing\n", b[1]);
printf("b[0] addr = 0x%x before comparing\n", (int)b[0]);
printf("b[1] addr = 0x%x before comparing\n", (int)b[1]);
qsort(a, 2, sizeofa, cmpa);
qsort(b, 2, sizeofb, cmpb);
printf("a[0] = %s after comparing\n", a[0]);
printf("a[1] = %s after comparing\n", a[1]);
printf("b[0] = %s after comparing\n", b[0]);
printf("b[1] = %s after comparing\n", b[1]);
printf("b[0] addr = 0x%x after comparing\n", (int)b[0]);
printf("b[1] addr = 0x%x after comparing\n", (int)b[1]);
return 0;
}
我一直以为执行比较后,b[0]与b[1]指针(地址)会交换,没想到指向的字符串内容交换了。