scanf函数不能运行(VS2019)(解决方案)

简介: 直接放在拷贝文档里,以后每次建立新项目时就会自动添加这行代码(详情请看本人空间的:VS文件初始化教程)

很多同学在出识C语言时大多会遇到scanf不能使用的问题


先上解决方案!


方案一:在每一个scanf后面加_s        scanf—>scanf_s


scanf_s


方案二:在项目第一行定义_CRT_SECURE_NO_WARNINGS


#define _CRT_SECURE_NO_WARNINGS 1


方案三:一劳永逸,但需要一点技术。找到vs的拷贝文件把我们方案二的代码


直接放在拷贝文档里,以后每次建立新项目时就会自动添加这行代码(详情请看本人空间的:VS文件初始化教程)


现在我就来告诉大家为什么报错,以及如何解决。


09660565b2c8452c86892ee482377541.png


 我们在写好代码后,ctrl+F5让代码运行


27f59f39dbad46d2bfb084cbeefad3e0.png

57279aaf1ba74c88a8a7686585f713c8.png


随之而来的就是一乱连串的报错哈哈,为什么会出现这中情况呢?我们来看一下输出分析


2ab7792c8cf4420f807a6383bf05c04e.png


他说:scanf这个函数不安全,建议我们使用scanf_或者使用_CRT_SECURE_NO_WARNINGS


我们来测试一下


1. 加上_s


c1156a8a18ee40959a989bd38f2c0671.png


2. 定义_CRT_SECURE_NO_WARNINGS


1c2e473f46164eff88ff9c2b543a9495.png


都能使代码很好的完成。


这时候很多好奇的宝贝就会问了,为什么不安全呢,我们难道学了个不安全的函数?


我们通过测试代码来阐述它的不安全


#define _crt_secure_no_warnings 1
#include<stdio.h>
int main()
{
  char arr[5] = { 0 };
  scanf("%s", arr);
  //这时候scanf就可能不安全了,arr定义的5个空间,而我们通过scanf可以输入很多个数字
  //比如输入六个数字然后回车,会直接报错
  //scanf是你给它多少它直接存多少,没有管空间是否能承受得住
  //scanf_s是只有vs里才有的,其他编译器不易定能运行成功
  //所以我们直接在第一行直接定义#define _crt_secure_no_warnings 1消除报错
  //就不用每次写scanf的时候都写成scanf_s
  return 0;
}


我们定义的arr数组为5个空间,而我们通过scanf可以输入很多个数字


比如输入六个数字然后回车,会直接报错


scanf是你给它多少它直接存多少,没有管空间是否能承受得住

另外scanf_s是只有vs里才有的,其他编译器不易定能运行成功(不具有通性)


所以长远来看我们最好还是使用方案二,三的方法消除报错。

相关文章
|
6天前
|
程序员 编译器 C语言
用printf函数输出数据
用printf函数输出数据
18 2
|
6天前
|
存储 C语言
scanf()函数基本介绍
scanf()函数基本介绍
26 0
|
6天前
|
编译器 C++
VS编译器对scanf函数不安全报错的解决办法(详细步骤)
VS编译器对scanf函数不安全报错的解决办法(详细步骤)
|
6天前
|
C语言
使用printf函数输出数据
在C语言中,printf函数是一个常用的标准库函数,用于在控制台输出格式化的字符串和数据。它允许我们按照指定的格式输出各种类型的数据,包括整数、浮点数、字符和字符串等。
12 0
|
6天前
|
存储 程序员 C语言
C语言的scanf的作用和屏幕需要输入类型
C语言的scanf的作用和屏幕需要输入类型
9 0
|
7月前
|
编译器 C语言 C++
如何解决VS中scanf使用时报错或无法使用的问题
如何解决VS中scanf使用时报错或无法使用的问题
113 0
|
6天前
|
存储 C语言
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
34 0
|
10月前
|
编译器 文件存储 C++
一劳永逸的方法解决函数scanf报错问题
一劳永逸的方法解决函数scanf报错问题
124 0
|
5月前
|
安全 C语言 C++
VS中使用scanf函数报错如何解决?
VS中使用scanf函数报错如何解决?
26 0
|
10月前
|
存储 编译器 C语言
重定义/自定义printf到串口输出实现的三种方法(cubeide)
重定义/自定义printf到串口输出实现的三种方法(cubeide)
401 0