简单谈谈C语言数据类型转换的安全问题
在c语言的赋值类型转换中,有两种转换方式,分为隐性转换和显性转换。
什么是隐性转换,举个简单的demo(当然了,实际遇到的肯定比这复杂太多)
int a = 3; int b = 0; a = b; printf("%d", a);
在这里,a的值应该为几,没错,已经不再是之前的数字,而是变成了b赋予的值,也就是说,我们这两行代码已经将a赋予的3变成了b赋予的0,我们将这种系统“偷偷摸摸”修改的称之为隐性转换。
这种隐性转换,可以对b的值作出修改,看起来是不是很方便,但是,我们下面再举一个例子,我们假设a的值为100000,b的值为1,
int a = 1000000; short int b = 1; b = a; printf("%d", b);
这种情况下,我这边运行的结果如下:
所以不难看出数据出现了丢失,这是因为,a,b两个值的区间过大。因此成为了某些程序员代码中bug的一部分。
说完隐性转换,再说说显性转换,举一个简单的例子:
int a = 100; double b = 0; b = a; printf("%d", (int)b);
这里实际上就是显性转换,显性转换,顾名思义,就是我明知道会这样,故意这么去设定操作,这里有几个容易失误的地方,那就是输出时一定需要用%d和(int),对它进行强制。否则输出结果就是浮点型。
好啦,这篇博客就写到这里,如果有其他疑问,欢迎评论区评论。
[温馨提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。]
[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]