gpt4 book ai didi

C - fgets 和标准输入的长度

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:14 25 4
gpt4 key购买 nike

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

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

附言我必须使用 fgets,因为它是我项目中的一项要求。

最佳答案

来自 fgets() 的文档:

Reads at most count - 1 characters from the given file stream and stores them in str. The produced character string is always NULL-terminated. Parsing stops if end-of-file occurs or a newline character is found, in which case str will contain that newline character.

请求读取最多 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. */
}
}

关于C - fgets 和标准输入的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12730134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com