在C中比较两个字符串时遇到麻烦

时间:2019-12-17 20:04:35

标签: c pointers malloc

我试图通过C中的命令行参数接收两个字符串,然后进行比较。我知道malloc返回一个void指针,尽管我不知道如何将其传递给我的比较函数,因为它正在寻找一个const void指针。我想我将不得不将指针转换为指向将在其中分配字符串的堆上的内存的指针(?),尽管我不确定如何执行此操作,对您有所帮助。

int cmpstringp(const void *arg1, const void *arg2);

int main(int argc, char **argv) {
    char *strOne;
    char *strTwo;
    int n = 10;
    strOne = (char *)malloc((n + 1) * sizeof(char));
    strTwo = (char *)malloc((n + 1) * sizeof(char));
    strOne = argv[1];
    strTwo - argv[2];
    cmpstringp(strOne, strTwo);
}

int cmpstringp(const void *arg1, const void *arg2) {
    const char * const * ptr1 = (const char **)arg1;
    const char * const * ptr2 = (const char **)arg2;

    const char *str1 = *ptr1; 
    const char *str2 = *ptr2;

    return strcmp(str1, str2);
}

1 个答案:

答案 0 :(得分:5)

只需看看直接将strcmp应用于argv的返回值:

int main(int argc, char * argv[])
{
    int ret;

    ret = strcmp(argv[1], argv[2]);
    if (ret == 0)
        printf("Equal strings.\n");

    return 0;
}

顺便说一句,如果您希望有一个带有泛型参数的函数来比较两个字符串(即在qsort()中使用),可以按照以下方法进行操作:

int string_cmp(const void * a, const void * b)
{
     return strcmp((const char*)a, (const char*)b);
}