scanf函数返回值被忽略

心怀希望的前进

前言

最近在复习c语言,发现了许多之前不了解的知识,今天想来与大家分享一下scanf返回值值被忽略的问题。

很多人应该都在vs中见到过,我们先说原因,再说改进方法

原因:

scanf函数在读取数据时不会检测边界,可能导致内存泄漏,有一定的安全隐患,我们知道v于是乎,vs就会报错,举个例子:

看这段代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
	char a[3];
	scanf("%s",a);
	printf("%s", a);
	return 0;
}

我们输入"abcdef",很明显是已经超过了数组的大小的,一下试运行结果

弹窗的警告是:运行时检查失败,变量'a'周围的堆栈已损坏,这边证明了我们刚才的说法。

2.解决方案:

方案1

把所以scanf函数用scanf_s替换,这是vs提供的一个函数,可以避免上述情况的发生。

但是!!!记住,这个函数没有可移植性,他只在vs编译器下可用,如果你要复制代码到别的平台则需要把所有scanf_s改为scanf,十分麻烦,并不推荐。

方案二

在程序第一行加上一句:

#define _CRT_SECURE_NO_WARNINGS 1

这个指令用于关闭与安全性相关的警告。

当然了,每创建一个文件就要写一次太烦人了,于是乎我们可以在这个路径下

找到newc++file.cpp,然后以记事本的形式打开,把这段代码复制进去点击保存即可

如果他告诉你权限不足,那你就把该文件移到桌面上即可更改,改完在移回去即可。

之后你每一次在vs创建文件都会直接自带这段代码。

ok,感觉有用的话就点个赞支持一下吧

相关推荐
LDG_AGI6 分钟前
【深度学习】多目标融合算法—样本Loss提权
人工智能·深度学习·神经网络·算法·机器学习·迁移学习·推荐算法
扫地羊9 分钟前
C语言插入排序及其优化
c语言·算法·排序算法
Milk夜雨12 分钟前
头歌实训数据结构与算法-二叉树及其应用(第9关:二叉树的顺序存储及基本操作)
开发语言·数据结构·数据库·c++·算法
啊烨疯狂学java13 分钟前
1231java面经md
java·算法·面试·排序算法
xing.yu.CTF14 分钟前
python的urllib模块和http模块
开发语言·python·http
KeyPan24 分钟前
【视觉SLAM:六、视觉里程计Ⅰ:特征点法】
人工智能·深度学习·数码相机·算法·机器学习·计算机视觉
星雨流星天的笔记本25 分钟前
数据结构-顺序表
数据结构·算法
Want59541 分钟前
Python跨年烟花
开发语言·python·pygame
百年孤独_41 分钟前
Python:爬虫基础《爬取红楼梦》
开发语言·爬虫·python
_半夏曲44 分钟前
工厂+策略模式之最佳实践(疾病报卡维护模块API设计)
java·开发语言·设计模式