scanf函数在VS编译器上报错

本文讲述了在VisualStudio中scanf函数无法使用的现象,由于安全原因VS推荐使用scanf_s。解决方法是定义_CRT_SECURE_NO_WARNINGS宏,或在每个源文件开头添加该定义。
摘要由CSDN通过智能技术生成


1. scanf函数在VS上无法使用

  相信大家在vs编译器上,第一次使用scanf的时候会遇到一个问题:无法使用scanf函数,使用就报错。如下图所示。

在这里插入图片描述

  是什么原因导致这种情况呢?其实vs编译器已经给出了解释,在编写区的下方的信息提示区,如下图所示。意思是:scanf这个函数或者参数可能不安全,考虑使用scanf_s代替。

在这里插入图片描述


2. 为什么vs不让使用scanf

  VS编译器不让使用scanf函数,是因为scanf这个函数本身就存在问题。scanf在使用%s读取字符串的时候可能会导致越界访问。为了避免这种情况,VS编译器就实现了只属于自己平台的标准输入函数scanf_s,并且强烈推荐大家使用。于是出现了限制使用scanf的情况,一用就会报错。
  举个例子:使用scanf函数输入字符串到长度为10的数组中去。代码和运行结果如下。scanf函数在读取字符串时,是不会管存储字符串的那块空间是否能够放得下,它只会一股脑的往里面赛,越界了也继续塞,必然导致程序崩溃。

#include<stdio.h>

int main()
{
	char arr[10];
	scanf("%s", arr);
	return 0;
}

在这里插入图片描述


3. 解决方法

  如果大家想在vs编译器上使用scanf这个函数,并且不会报错,该怎么做呢?其实vs编译器也告诉大家了,如下图所示。意思是:如果想使得scanf的报错失效,就使用_CRT_SECURE_NO_WARNINGS这一段话。

在这里插入图片描述

  在源文件第一行写上#define _CRT_SECURE_NO_WARNINGS这一段代码,就可以解决scanf报错的问题了。但是唯一不足的就是每次创建源文件时,都需要在文件开头敲上这段代码。那怎样能够一劳永逸的解决这个问题呢?方法如下:

  1. 安装一个工具everything。
  2. 用everything搜索一个文件newc++file.cpp ,右击选中它,点击打开路径。
    在这里插入图片描述
  3. 将该文件拷贝一份放置桌面,然后用选择打开方式,用VS打开。
    在这里插入图片描述
  4. 在VS编译器内存入一句话:#define _CRT_SECURE_NO_WARNINGS,然后保存并退出。在这里插入图片描述
  5. 将文件拖入原文件所在位置,并替换原文件。
    在这里插入图片描述
      这样就使得每次创建源文件的时候第一行始终存在:#define _CRT_SECURE_NO_WARNINGS了。

在这里插入图片描述

这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值