比较C中的两个字符串(字符串指针)
我有一个字符串数组,声明如下:比较C中的两个字符串(字符串指针),c,C,我有一个字符串数组,声明如下: char * d[] = {"bca", "abc", "cba", "abcd"}; char e[][5] = {"bca", "abc", "z", "dca", "cba"}; 我试图用一个通用比较方法(使用void*)比较d[1]和d[2]: 由于某种原因,当我尝试打印s1\s2时,我会听到一些胡言乱语。 注意:如果数组是这样声明的,则它确实可以工作: char * d[] = {"bca", "abc", "cba", "abcd"
char * d[] = {"bca", "abc", "cba", "abcd"};
char e[][5] = {"bca", "abc", "z", "dca", "cba"};
我试图用一个通用比较方法(使用void*)比较d[1]和d[2]:
由于某种原因,当我尝试打印s1\s2时,我会听到一些胡言乱语。
注意:如果数组是这样声明的,则它确实可以工作:
char * d[] = {"bca", "abc", "cba", "abcd"};
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);
}
void排序(void*arr,int arrLength,int sizeOfElement,int(*比较)(void*,void*))
{
int i,j;
对于(i=0;i0)交换(((char*)arr+j*sizeOfElement),((char*)arr+(j+1)*sizeOfElement),sizeOfElement);
}
我通过调试器查看s1和s2
我做错了什么
谢谢。对于阵列“e”,这是cmp:
int cmpS1(void *aa,void *bb){
int r;
r=strcmp((char*)aa,(char*)bb);
return r;
}
对于阵列“d”,您需要此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;
}
你怎么印的?也向我们展示代码。首先,如果您将“ca”和“cat”输入此函数,则逻辑不正确。不相同字符串的相同前缀将报告为相等;但它们不是。@MattMcNabb,我不这么认为,这里的函数在其中一个字符串完成后立即返回
0
。您对数组的转换已完全完成。char*s1=*(char**)p1;char*s2=*(char**)p2代码>