我有一个声明如下的字符串数组:
char * d[] = {"bca", "abc", "cba", "abcd"};
我试图在通用比较方法中比较d [1]和d [2](使用void *):
int compareString(void * p1, void *p2)
{
char * s1 = (char *) p1;
char * s2 = (char *) p2;
while(*s1 && *s2)
{
if(*s1 > *s2) return 1;
else if(*s2 > *s1) return -1;
s1++;
s2++;
}
return 0;
}
出于某种原因,当我尝试打印s1 \ s2时,我得到了一些胡言乱语。 注意:如果数组声明如下,它确实有效:
char e[][5] = {"bca", "abc", "z", "dca", "cba"};
编辑:
我调用函数的代码:
void sort(void * arr, int arrLength, int sizeOfElement, int (*compare)(void *, void *))
{
int i, j;
for(i = 0; i < arrLength; i++)
for(j = 0; j < arrLength - 1; j++)
if(compare(((char *)arr + j * sizeOfElement), ((char *)arr + (j + 1) * sizeOfElement)) > 0) swap(((char *)arr + j * sizeOfElement), ((char *)arr + (j + 1) * sizeOfElement), sizeOfElement);
}
我通过调试器查看s1和s2。
我做错了什么?
感谢。
答案 0 :(得分:2)
对于阵列&#39; e&#39;这是cmp:
int cmpS1(void *aa,void *bb){
int r;
r=strcmp((char*)aa,(char*)bb);
return r;
}
对于阵列&#39; d&#39;你需要这个cmp:
int cmpS2(void *aa,void *bb){
char* s1=*(char**) aa; char* s2=*(char**) bb;
while(*s1 && *s2){
if(*s1 > *s2) return 1;
else if(*s2 > *s1) return -1;
s1++;
s2++;
}
return 0;
}