C语言 如何防止我的代码出现以下转换错误?

jxct1oxe  于 2023-06-05  发布在  其他
关注(0)|答案(1)|浏览(150)

它可能听起来像一个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 来看,这是缺乏安全性。是的,我可以使用intlong int,但如果用户正在破解short int,这不是正确的选择。我该如何处理这个问题?

xxb16uws

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

相关问题