[英]Limit Console Input Length in C:
我正开始为我正在上的课设计一个外壳应用程序,以便在Linux终端中运行。
当然,这将涉及从用户读取可变长度的输入字符串(命令)。 我知道我可以简单地将每个命令读入我认为适当大小的缓冲区中,但这有可能a)截断该命令或b)导致缓冲区溢出。
如果可能,如何限制用户输入控制台的长度?
假设,如果我将命令长度设置为3,则允许123
,但是如果输入字符串中已经存在123
(在用户按下enter之前)并且用户尝试添加4
,则不会在控制台上打印任何字符,甚至即使是“错误侦测”。
我意识到我可以设计这种功能,但是如果需要,我不确定从哪里开始做这种事情。
既可以使用现有的解决方案,也可以提供有关实施我自己的解决方案的建议。
编辑:
我想一种便宜又容易的解决方案是一次读取字符上的命令,直到到达输入信号或达到最大长度为止。 这种解决方案会出现问题吗?
控制台的这种低级控制不是C的基本内置I / O模型所包括的。
您需要研究特定于平台的内容,例如用于类Unix系统的ncurses 。
如果不深入研究特定于平台的控件,您将无法限制在按下“ Enter”之前在控制台中可以使用多少个字符。
您可以做的就是检查输入缓冲区中是否存在换行符; 如果不存在,则用户输入的字符数多于您准备处理的字符数。 您可以拒绝该输入,然后重复阅读stdin
直到看到换行符。
例:
#include <stdio.h>
#include <string.h>
...
char buf[SIZE];
...
printf("Gimme something: ");
fflush(stdout);
if (fgets(buf, sizeof buf, stdin))
{
char *newline = strchr(buf, '\n');
if (!newline)
{
printf("Input too long: \"%s\"\n", buf);
while (!newline && fgets(buf, sizeof buf, stdin))
newline = strchr(buf, '\n');
}
else
{
// do something with buf
}
}
为了响应您的编辑,终端通常是行缓冲的,允许用户在按Enter之前输入任意数量的内容,而您甚至都不知道。 您可以将终端设置为原始模式或cbreak模式,但随后要进入特定于平台的区域。
相反,我建议您避免这个问题,并接受一个码头是200万年前的一个愚蠢的痕迹。 大多数平台将LINE_MAX
定义为任何程序需要处理的最大行大小。 除此之外,您可以简单地假设您的用户对您造成了困扰,并进行截断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.