当输入无效时递归请求输入时如何防止缓冲区溢出

问题描述 投票:0回答:1

必须采用大小为 5 的输入字符串。还必须检查某些不相关意义上的有效性。如果输入无效,会提示用户重新输入。

使用

scanf("%4s", input);
但是,如果用户输入假设的 8 个字符的字符串,则 scanf 仅扫描仍在缓冲区中的最后 4 个字符,然后再询问实际的用户输入。

我尝试创建一个缓冲区变量来存储输入,然后再将其传递给目标变量。

c++ c scanf buffer-overflow
1个回答
0
投票

简单:始终从用户那里获取整行文本(使用

fgets()
)。

如果用户没有给你一整行文本,那么输入无效;要么抱怨并中止,要么丢弃输入,直到找到换行符。

这是因为一个简单的原则:

⟶ 用户将始终在每次要求的输入结束时按Enter

一旦获得一整行文本,然后尝试将其转换为

int
或其他。

© www.soinside.com 2019 - 2024. All rights reserved.