如何限制输入的字符数量

时间:2014-09-23 05:06:22

标签: c string

所以,我正在开发一个简单的密码程序。到目前为止,我已经获得了此代码

/* 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。我怎样才能防止这种情况发生?

2 个答案:

答案 0 :(得分:3)

usrIn只有9个字符,当然会忽略额外的字符。只需给usrIn足够的空间:

char usrIn[100];

作为最佳实践:

fgets(usrIn, sizeof(usrIn), stdin);

您还没有考虑到另一个问题:新行字符'\n'fgets视为有效字符,所以它也在{{ 1}},您需要在比较密码之前手动删除它。

答案 1 :(得分:0)

没有给出usrIn的大小给它动态的大小&amp;执行动态输入会将完整密码插入数组usrIn。