我不明白为什么使用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;
}
答案 0 :(得分:2)
这里的意思是,fgets()
读取并存储结尾的换行符,在man page中检查fgets()
。
fgets()
从流中读取最多小于大小的字符,并将其存储到s
所指向的缓冲区中。在EOF
或换行符之后停止读取。 如果读取了换行符,则将其存储在缓冲区中。 [...]
您需要在比较之前删除结尾的换行符。
您可以使用
清除输入 array[strcspn(array, "\n")] = 0;
从输入中删除尾随换行符。