高防服务器

简单谈谈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 成本,提升运维效率,使您更专注于核心业务创新。]

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]