繁体   English   中英

比较C中的两个字符串(字符串指针)

[英]Comparing two strings in C (string pointers)

我有一个这样声明的字符串数组:

    char * d[] = {"bca", "abc", "cba", "abcd"};

我正在尝试使用通用比较方法(使用void *)将d [1]与d [2]进行比较:

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。

我究竟做错了什么?

谢谢。

对于数组“ 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM