前言
在初学c语言不久并使用了vs编译器之后,就发现了很多问题,其中便是vs编译器会对scanf函数报错。所以简单说说这个问题。
报错原因
scanf会存在溢出问题。如
即scanf在输入是不会考虑目标空间是否够大,而是把所有用户输入的值全部存到目标空间中去,这就会导致数据溢出非法访问的问题。
而当换成scanf_s后虽然代码依旧无法运行,不过并不会出现此类错误。同时,scanf_s函数在对数组进行输入时还会要求传参时将数组元素个数一并传递,这样就体现出了scanf_s的安全性。
使用方法
即使scanf存在这种小问题,但在一般情况下还是推荐用scanf,因为scanf_s是vs编译器提供的,并不是c语言的库函数,所以如果用scanf_s会降低代码的可移植性。那么,如何防止编译器继续对这个函数报错呢?
如图,报错时就说明了解决方法,即使用_CRT_SECURE_NO_WARNINGS。所以,我们想在vs编译器中使用scanf函数时只需将#define _CRT_SECURE_NO_WARNINGS 1这一行代码加在文件的最开头即可。
这时又有一个小问题,那就是如果每一次新创建文件的时候都要加这么一行代码好像有一点繁琐。所以还有一个一劳永逸的办法。
只需在你的vs安装路径中找到这个文件,将之移动到桌面,然后将刚刚的代码写入其中,这样每次新建文件时,代码就会自动加入到文件中。
之所以要先移动到桌面是因为直接打开时我们会发现我们的权限不够保存修改,而在桌面上我们的权限更大一些。
那么这个问题就分享到这里,至于这两个函数更加具体的用法和区别等,还要在慢慢的学习了。