繁体   English   中英

C-fgets和stdin的长度

[英]C - fgets and length of stdin

我已经用C语言编写了一个程序,该程序可以让用户输入密码以允许他进入或不进入系统。 我正在使用方法fgets。 正确的密码是“ letmein”。 这是代码:

现在,我要验证用户通过stdin输入的密码不超过8个字符。 由于程序是(没有空的if语句),因此即使用户输入“ letmein0000000”,也将授予用户访问权限,因为fgets仅获取前七个字符。 现在,如果用户输入“ letmein”,我只想授予其访问权限。 请问该怎么做?

PS我必须使用fgets,因为这是我项目中的要求。

fgets()文档中:

最多读取-从给定的文件流中读取1个字符,并将其存储在str中。 产生的字符串始终以NULL终止。 如果发生文件结尾或找到换行符,则分析停止,在这种情况下,str将包含该换行符。

请求读取最多8字符(这意味着将9作为第二个参数传递)。 如果用户输入的字符超过7则可以捕获该字符。 通知用户失败,并跳过stdin剩余的内容。 如果用户正确输入7并点击返回,则fgets()将停在换行符处。

检查fgets()返回值,以确保代码不会尝试处理统一缓冲区。

例如:

char password[9];

if (fgets(password, 9, stdin))
{
    /* Strip new-line if present. */
    char* nl = strchr(password, '\n');
    if (nl) *nl = 0;

    if (strlen(password) > 7)
    {
        /* Password too long. 
           Skip remaining input if necessary. */
        int c;
        while ((c = fgetc(stdin)) != EOF && c != '\n');
    }
    else if (0 == strcmp("letmein", password))
    {
        /* Good password. */
    }
    else
    {
        /* Incorrect password. */
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM