【发布时间】:2019-12-11 18:27:42
【问题描述】:
如何使以下代码对缓冲区溢出和无效输入具有鲁棒性? 能否请您编辑我应该更改哪些部分!
#include <stdio.h>
#include <string.h>
void password();
int main()
{
password();
return 0;
}
void password()
{
int number;
printf("PLEASE ENTER YOUR PASSWORD \n");
while (1){
if((scanf("%d",&number)) != 1)
{
printf("wrong input\n");
}
else {
if (number==999)
printf("\n----PASSWORD IS CORRECT-----\n\n");
break;
}
else
printf("\n Please enter a valid password (integer)\n");
}
}
}
【问题讨论】:
-
欢迎来到 Stack Overflow!请edit your question 包括确切您的问题是什么。只是快速查看您的代码,似乎您在
if (number==999)之后缺少一个左括号。但我不知道这是否能解决您的问题除非您解释一下。请附上您的具体错误消息或不正确的行为,以及您为尝试自己修复它所做的工作。 -
@Das_Geek 在不对称
{}存在的情况下修复缩进(尽管通常是一项崇高的努力)是有风险的。 -
@Yunnosch 同意。虽然在这种情况下我相信我是正确的,否则第二个
else无处可去。 -
Dexter11 请提供您的代码的minimal reproducible example。这至少需要修复
{}的可疑结构。 -
@Das_Geek 我也这么认为。但是您应用的缩进(尽管令人信服)实际上意味着插入
{并且(仅在我看来)边界代码更改。请注意,我没有拒绝您的编辑,但也不会接受。也许其他人喜欢它,这对我来说很好。但理想情况下,Dexter 会自行修复代码。如果没有,那么在这个问题上花更多的时间是没有意义的。
标签: c