何谓不能使用?
当我们在vs里边正常使用scanf函数的时候,vs会产生(如下图)
当我们不加任何操作的时候,vs会产生一个警告,一个报错,接下来我来一一说明。
一个报错
1.为何scanf函数不安全
在vs里边,scanf函数会被认为是不安全的,那什么是不安全呢?
从图片里边不难看出,我定义了一个字符数组并且用scanf函数输入了erzong,当我运行的时候,确实在屏幕上也打印出来了,但vs会出现一个error。因为我命名定义的长度为5的字符数组,但我输入的时候是6个字符,却也正常打印出来了,这就所谓scanf函数不安全的地方。当然还有其他的,这里只举这一个例子。
2.解决办法
2.1:方法1
我们可以根据vs的报错提示在文件的最顶端放置一条信息
#define _CRT_SECURE_NO_WARNINGS 1
这样就可以避免报错,但是这种方法会有点麻烦,因为每当新建一个.c源文件的时候,都需要加上这一条语句。
2.2:方法2
跟方法1一样,也是每次新建.c源文件的时候在最上边加上刚才的那条语句,但这次是一劳永逸的。如果你的电脑上有everything这个软件的话,你可以打开直接搜索newsc++file.c这个文件
其中里边的这个文件路径就是当初安装vs的那个路径底下。接下来打开鼠标右击该文件,点路径选项。
之后就来到了该文件具体位置的地方,选择用记事本打开。然后增加
#define _CRT_SECURE_NO_WARNINGS 1 这条语句,并且保存记事本。不过往往没那么顺利。
可能会出现这个警告。这时候进行如下操作。
1.剪切该文件到桌面上。
2.打开这个剪切到桌面上的文件加入那条语句,并且保存,然后再将那个文件剪切回原来的路经底下。
3.大功告成,打开vs,这时候你再新建源文件就直接在最上边产生那条语句。效果如下
一个警告
使用scanf函数的时候常常也会出现警告,说是返回值被忽略,因为scanf函数是有返回值的,返回值代表的是scanf成功读取到的数据的个数,如果发生读取错误或者到达文件末尾就会返回EOF,什么都没有读到就会返回0.
备注:vs往往会让你用scanf_s这个函数来代替scanf函数,但因为scanf_s这个函数仅限vs这个IDE使用,所以就不过多介绍了。