所以,我正在开发一个简单的密码程序。我有了这个代码,到目前为止如何限制输入的字符数
/* simple password prog */
#include<stdio.h>
#include<string.h>
int main(){
char usrIn[9];
char password[]={"AXcd8002"};
do {
fprintf(stdout,"\n Password:");
fgets(usrIn,9, stdin);
if (strcmp(usrIn,password)<0 || strcmp(usrIn,password)>0) {
fprintf(stdout,"\n Password incorrect"); };
}while((strcmp(password,usrIn))!=0);
fprintf(stdout, "\n The password is correct \n");
return 0;
}
此代码工作正常,如果密码不正确,则循环继续下去,如果这是正确的 - 循环将打破。但是不起作用的是:如果用户至少输入一个字符的密码,程序仍然会说它是正确的。例如,如果用户输入AXcd8002AAA,则fgets将只读取AXcd8002,并忽略AAA。我怎样才能防止这种情况发生?
使缓冲区大于密码,是不是很简单?而且strcmp对于密码也是不安全的,因为它会花费不同的时间来写错误和写密码,所以如果你测量时间,你可以确定写入和错误的字符序列。 – 2014-09-23 05:17:01
谢谢,伊万。这仅仅是课堂作业,我们现在正在翻阅字符串,所以这就是为什么它很简单。所以我做了char usrIn [10]和fgets(usrIn,10,stdin),即使我输入正确的字符串,它也会抱怨密码不正确 – 2014-09-23 05:26:32
fgets读取所有字符,包括'\ n'(当您单击Enter时)。因此,首先在'\ n'出现之前检查长度。如果长度很好,用0代替\ n并比较字符串(buffer [9] ='\ 0')。 – 2014-09-23 05:48:48