Несовместимый тип для аргумента strcpy и strcmp - PullRequest
1 голос
/ 09 апреля 2019

(все строки). Мне нужно проверить, зарегистрировано ли уже данное имя пользователя (Item), сравнив его с очередью зарегистрированных имен пользователей. Но когда я пытаюсь собрать их с помощью strcmp, я получаю сообщение об ошибке в заголовке.У меня также есть strcpy для добавления имени пользователя в очереди с той же ошибкой. Как я могу справиться с этими проблемами?

Это мои структуры

typedef struct{
    char userid[8];
}QueueElementType;

typedef struct QueueNode *QueuePointer;

typedef struct QueueNode
{
    QueueElementType Data;
    QueuePointer Next;
} QueueNode;

typedef struct
{
    QueuePointer Front;
    QueuePointer Rear;
} QueueType;

Код для проверки данного имени пользователя вочередь

boolean AlreadyLoggedIn(QueueType Queue, QueueElementType Item){
    QueuePointer CurrPtr;
    CurrPtr = Queue.Front;
    while(CurrPtr!=NULL){
        if(strcmp(CurrPtr->Data,Item.userid) == 0){
            printf("You have logged in to the system from another terminal.New access is forbidden.");
            return TRUE;
        }
        else CurrPtr = CurrPtr->Next;
    }
    return FALSE;
}

Добавление данного имени пользователя в очередь

void AddQ(QueueType *Queue, QueueElementType Item){
    QueuePointer TempPtr;

    TempPtr= (QueuePointer)malloc(sizeof(struct QueueNode));
    strcpy(TempPtr->Data,Item.userid);
    TempPtr->Next = NULL;
    if (Queue->Front==NULL)
        Queue->Front=TempPtr;
    else
        Queue->Rear->Next = TempPtr;
    Queue->Rear=TempPtr;
}

Ответы [ 2 ]

1 голос
/ 09 апреля 2019
strcpy(TempPtr->Data,Item.userid);
strcmp(CurrPtr->Data,Item.userid)

Здесь Data имеет тип QueueElementType.

Но strcpy и strcmp принимают \0 прекращено char * в качестве аргумента.

Измените его на.

strcpy(TempPtr->Data.userid,Item.userid);
strcmp(CurrPtr->Data.userid,Item.userid)
0 голосов
/ 09 апреля 2019

Попробуйте

strcmp(CurrPtr->Data.userid,Item.userid)

, поскольку strcmp() ожидает аргумент const char*, но CurrPtr->Data имеет тип QueueElementType, а не тип const char*.Со страницы руководства strcmp .

int strcmp (const char * s1, const char * s2);

То же самое применимо в strcpy() также.Это

strcpy(TempPtr->Data,Item.userid);

сделать как

strcpy(TempPtr->Data.userid,Item.userid);
...