0

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

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

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

4

1 回答 1

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. */
    }
}
于 2012-10-04T15:03:07.437 回答