C函数(功能)缓解

时间:2018-11-12 12:55:56

标签: c fgets

我不明白为什么使用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 :(得分:2)

这里的意思是,fgets()读取并存储结尾的换行符,在man page中检查fgets()

  

fgets()从流中读取最多小于大小的字符,并将其存储到s所指向的缓冲区中。在EOF或换行符之后停止读取。 如果读取了换行符,则将其存储在缓冲区中。 [...]

您需要在比较之前删除结尾的换行符。

您可以使用

清除输入
 array[strcspn(array, "\n")] = 0;

从输入中删除尾随换行符。