它可能听起来像一个XY Problem,但我很困惑。
我想在用户输入6时执行一些代码。首先看看代码:
#include<stdio.h>
int main(void) {
short int x;
printf("Val :");
scanf("%d", &x);
if (x == 6) {
//some code
}
return 0;
}
SHRT_MAX
在我的系统中是32767,如果用户设法输入65442,这将最终转换为6,代码将以这个值执行,而它应该以6执行。好吧,它是在6执行的,但从用户的Angular 来看,这是缺乏安全性。是的,我可以使用int
或long int
,但如果用户正在破解short int
,这不是正确的选择。我该如何处理这个问题?
1条答案
按热度按时间xxb16uws1#
回复:我系统中的SHRT_MAX为32767,如果用户设法输入65442,则将转换为6
来自C11 7.21.6.2
fscanf()
函数/10:如果此对象没有适当的类型,或者转换的结果无法在对象中表示,则***行为未定义。***
我建议阅读一整行
fgets()
并用strtol()
解析它。scanf()
不适合这个。这可能会有所帮助:Correct usage of
strtol()
.%d
说明符需要int *
,而不是short int *
。将其更改为%hd
。