我使用的语法有什么问题

时间:2017-10-06 22:10:49

标签: c

嗨,有人可以帮我解决这个错误。在分区块中,它表示我给出了结构列表枢轴"不兼容的类型。它说我需要在我的问题中添加更多细节,所以我要继续写下更多的东西而忽略。

struct list {
    char first;
    char second;
    char third;
    char fourth;
};

struct list *plist[num];

for(int i = 0; i < num; i++) {
    plist[i] = &list[i];
}

这是我对列表进行分区的地方。没有分区的乐趣

int part(struct list **A, int start, int finish) {

    //Error is popping up in this block
    struct list pivot = A[start]->first;
    int i = start;
    int j = finish;
    while(1) {

        while(strcmp(A[i]->first, pivot) < 0) {

            i = i + 1;
        }
        while(strcmp(A[j]->first, pivot) > 0) {

            j = j - 1;
        }
        if(i < j){

            swap(&A[i], &A[j]);

        } else {

            return j;

        }
    }
}

继承我的排序功能。

void sort(struct list **A, int start, int finish){
    if(start < finish){
        int p = part(A, start, finish);
        sort(A, start, p);
        sort(A, p + 1, finish);
    }
}

继承人我试图打印我的排序列表,但它没有工作......但

sort(plist, 0, num);

for(int i = 0; i < num; i++) {

    printf("%s \n\n", plist[i]->first);
}

1 个答案:

答案 0 :(得分:1)

考虑数据成员first如何在代码中使用,它被声明为字符数组或指向字符的指针。无论如何,这个声明中的初始化

struct list pivot = A[start]->first;

没有意义,因为结构和字符数组(或指向字符的指针)显然是不兼容的类型。

似乎你可以改写

const char *pivot = A[start]->first;

如果要将结构对象用作枢轴,则应编写

struct list pivot = *A[start];

并且在代码中使用表达式pivot.first而不是pivot,例如

while(strcmp(A[i]->first, pivot.first) < 0) {