简单谈谈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 intb = 0; b = a; printf("%d", b);

这种情况下,我这边运行的结果如下:
简单谈谈C语言数据类型转换的安全问题
文章图片

所以不难看出数据出现了丢失,这是因为,a,b的值过大。因此成为了某些程序员代码中bug的一部分。
说完隐性转换,再说说显性转换,举一个简单的例子:
int a = 100; doubleb = 0; b = a; printf("%d", (int)b);

这里实际上就是显性转换,显性转换,顾名思义,就是我明知道会这样,故意这么去设定操作,这里有几个容易失误的地方,那就是输出时一定需要用%d和(int),对它进行强制。否则输出结果就是浮点型。
【简单谈谈C语言数据类型转换的安全问题】好啦,这篇博客就写到这里,如果有其他疑问,欢迎评论区评论。

    推荐阅读