C - fgets和stdin的长度

Mat*_*hew 0 c string fgets

我用C编写了一个程序,让用户输入密码让他进入系统.我正在使用fgets方法.正确的密码是"letmein".这是代码:

现在我想验证通过标准输入用户输入的密码是超过8个字符.作为该计划是(无空if语句),用户被授予访问权限,即使他进入"letmein0000000",因为只有前七个字符由与fgets取出.现在,我只希望,如果他进入"letmein"授予访问权限的用户.怎么可以这样做呢?

PS我必须使用fgets,因为它是我项目中的一项要求.

hmj*_*mjd 6

从文档fgets():

读取最多count - 来自给定文件流的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. */
    }
}
Run Code Online (Sandbox Code Playgroud)