scanf接收用户的输入,printf在进行输出的时候,会有一些隐式的转换,而scanf则完全不会有任何的隐式转换,意味着我们必须时用对应的转换说明,来接收我们想要接收的值,如下图
如果我们想要接收一个字符,必须使用%c,而不能使用其他的,scanf并不会认为输入的数值可以转换,输入的数值并不会被scanf认为是一个字符,就会将他略过,从而寻找合适的转换说明来进行接收,这一点同样适用于浮点数上面,包括字符串,也是一个特殊的存在;
scanf的危险来源于两块:1、里面的转换说明必须一一对应,2、并没有规定读取多少的内容和执行多少代码,别有用心的人可以进行缓冲区溢出攻击,别人就能拿超出规定大小的后面内存做攻击,所以用scanf_s可以很好地解决这个问题
作为一个合格的软件工程师,应该有30%的时间思考如何让写代码,10%的时间写代码,剩余60%的时间调试代码
所有的局部变量的初始值都是0xcccccccc(在Debug版本下),数组赋值的时候,初始化列表,使用一个{}来代表初始化列表,初始化列表经常用于一个容器的初始化,如char数组,将他称之为一个容易,用{0}就是用0来填充所有数组
Expression报错:返回的指针等于NULL,一般是scanf_s(",%d", &i_num);这里少个&符号,&叫做取地址符,scanf_s在使用数组的时候不需要&符号