目录
二、为什么Visual Studio中直接使用scanf()会报错
一、scanf函数简要介绍
scanf函数用于读取用户的键盘输入,与printf函数一样,使用时需调用其头文件stdio.h。
scanf("%d",&i);
因为 C 语言的数据都是有类型的,scanf函数必须知道用户的输入类型,才能处理数据。它的第一个参数是一个格式字符串,里面会放置占位符,告诉编译器如何解读用户的输入,需要提取的数据是什么类型。它的其余参数就是存放用户输入的变量,格式字符串里面有多少个占位符,就有多少个变量。
注意:变量前面必须加上& 运算符(指针变量除外),因为scanf() 传递的不是值,而是地址,即将变量i 的地址指向用户输入的值。如果是指针变量(比如字符串变量),那就不用加& 运算符。
二、为什么Visual Studio中直接使用scanf()会报错
之所以VS中不能直接使用,是因为直接使用scanf函数会不安全,我们以下面这串代码为例:
#include <stdio.h>
int main()
{
char arr[5] = { 0 };//数组的初始化,五个字符
scanf("%s", arr);//如果输入超过五个字符?
printf("%s\n", arr);
return 0;
}
scanf函数在读取的时候不会关心数组中最多可以放几个元素,而是会全部读取用户的输入值,若果用户输入超过五个字符,就会产生错误!
三、如何解决报错问题
VS提醒我们使用scanf_s函数来代替,但是使用此函数容易导致在跨平台运行的时候无法编译,所以不如使用_CRT_SECURE_NO_WARNINGS来使报错失效,方法是在程序开头加上
#define _CRT_SECURE_NO_WARNINGS 1
但是每次写代码的时候都要重新加上这段代码,就显得十分的麻烦,因此为大家推荐一个一劳永逸的方法!
四、一劳永逸的解决方法
在VS的安装路径下找到newc++file.cpp这个文件(推荐使用everything搜索,很方便)
然后我们将其复制到桌面一份(因为直接操作有可能会提示没有权限),然后右击,选择在记事本中编辑,最后将#define _CRT_SECURE_NO_WARNINGS 1复制进去然后保存,最后再放回原路径中替换文件,就大功告成了!
可以看到,当我们建立新项目的时候,VS里默认就会忽略scanf函数的报错问题了!