Как исправить ошибку "strcmp: разные типы для формального и фактического параметра 1"? - PullRequest
0 голосов
/ 24 мая 2019

Почему я получаю эту ошибку:

'strcmp': разные типы для формального и фактического параметра 1

?Вот мой код:

typedef struct materie {
    char *nume_mat[50];
    int nota;
    struct materie *next;
} materie;

typedef struct student {
    char *nume[50];
    char *prenume[50];
    struct materie *prim;
    struct student *next;
} student; 

void adauga_student(student **lista, student *aux)
{
    student *q1, *q2;
    for (q1 = q2 = *lista;q1 != NULL && strcmp(q1->nume, aux->nume) < 0;q2 = q1, q1 = q1->next);
    if (q2 == q1)
    {
        aux->next = *lista;
        *lista = aux;
    }
    else
    {
        q2->next = aux;
        aux->next = q1;
    }
}

1 Ответ

0 голосов
/ 24 мая 2019

Это:

    char *nume[50];

... представляет собой массив из 50 указателей .Это не похоже на то, что вы хотите семантически, и это, конечно, не то, что strcmp() ожидает в качестве аргумента.

Вероятно, вместо этого вы хотите

    char nume[50];

...массив 50 char с.Это будет нормально работать в качестве аргумента strcmp(), потому что выражения типа массива распадаются на указатели на первый элемент массива.Фактически это одна из стандартных форм аргумента strcmp.

Возможно, вы захотите такое же изменение для других, похожих объявлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...