С-функция (fgets) смягчение - PullRequest
0 голосов
/ 12 ноября 2018

Я не могу понять, почему при вводе с помощью fgets всегда выдается «неверный пароль» для моей программы.

Однако, когда я использую gets(), например, gets(array);, он работает.

Ожидаемые результаты: если пароль неверный, выводит «Wrong Passwor» и для правильного, позвольте мне увидетьмой "доступ предоставлен":

#include <stdio.h>
#include <string.h>

int main(void)
{
    int n=15;
    char array[n];
    int pass = 0;

    printf("\n Enter the password : \n");
         fgets(array, n, stdin);

    if(strncmp(array, "password",n))
    {
        printf ("\n Wrong Password \n");
    }
    else
    {
        printf ("\n Correct Password \n");
        pass = 1;
    }
    if(pass)
    {
       /* Now Give root or admin rights to user*/
        printf ("\n Root privileges given to the user \n");
    }
    return 0;
}

1 Ответ

0 голосов
/ 12 ноября 2018

Дело в том, что fgets() читает и сохраняет завершающий символ новой строки, проверьте справочную страницу для fgets().

fgets() считывает из потока не более одного символа меньшего размера и сохраняет их в буфере, указанном s.Чтение прекращается после EOF или новой строки. Если читается новая строка, она сохраняется в буфере. [...]

Вам необходимо удалить этот завершающий символ новой строки перед сравнением.

Вы можете санировать ввод, используя

 array[strcspn(array, "\n")] = 0;

, чтобы удалить завершающий символ новой строки из ввода.

...