假设我创建了一个20字节的字符数组,并提示用户输入他们的名字,前提是他们的名字不应超过20个字符...... 例如:
char Name[20];
gets(Name);
现在假设他的名字是 abcdefghijklmnopqrstuvwxyz 但是一旦他进入 abcdefghijklmnopqrst ,名称就不应该进一步输入......用户提供的进一步输入都不会出现在控制台屏幕上......只有光标应该闪烁直到他按下进入。那怎么办?
操作系统: Windows 7
编译器: Visual C ++ 2010 Express
答案 0 :(得分:3)
联机帮助页指出:
永远不要使用gets()。因为在不事先知道数据的情况下无法判断get()将读取多少个字符,并且因为gets()将继续存储超出缓冲区末尾的字符,所以使用它是非常危险的。它已被用来打破计算机安全。请改用fgets()。
所以你可以使用fgets
:
char *fgets(char *s, int size, FILE *stream);
然而输入序列还没有停止;但是,如果使用正确,您将不再遇到未定义的行为和安全漏洞。
您应该更好地使用C ++工具,例如std::string
,std::getline
和标准的iostream。它们不会使您停止输入,但是,当以规范方式使用时,它们会阻止安全漏洞。
gets()
无法正确使用。当你使用它时,人们可能会死亡(因为我不是在开玩笑,你不会在我脸上露出笑容)。 可以证明没有正确的方法可以使用它。请不要忘记它,但要将其从工具箱中删除现在。fgets()
可以正确使用,但有很多机会滥用它。iostreams
和string
s 会自动正确使用。使用它们。不幸的是,没有内置的解决方案从输入读取最多N个字符而不必丢弃输入的多余字符。您必须使用第三方库或自己动手。< / p>
答案 1 :(得分:0)
这是愚蠢的回答: 例如,如果您希望用户输入最多20个字符的名称 用。创建一个char数组。大小[20] 要求用户输入名称的大小,如果小于或等于20,则检查号码的有效性。然后继续并添加名称,然后再请用户输入大小。 您可以使用字符串而不是char,但这不会确保用户实际遵循大小规则 例如,用户可以输入大小10,程序将允许他输入名称,但是一旦他允许使用.string,他可以根据自己的意愿编写。
使用char数组。对于20或更少的名字。字符
例如,代码需要一个简单的for循环 因为我们已经给出的尺寸小于或等于.20
For(int i = 0; i&lt; 20; i ++) CIN&GT;&GT;炭[I] 然后您可以将字符分配到字符串中。