VS2022 中 C 语言使用scanf报错如何解决

张开发
2026/4/9 18:55:08 15 分钟阅读

分享文章

VS2022 中 C 语言使用scanf报错如何解决
目录一、问题的由来二、解决办法1改用安全函数 scanf_sVS专用2关闭安全检查更好用3将安全检查“永久”关闭最建议一、问题的由来在VS2022中当我们在C语言中使用scanf写代码时VS2022 会在运行时报错如下图。其实这里并非是代码错了而是 VS 编译器的安全检查机制导致的只有 VS 编译器会报错在其他平台上直接使用 scanf 都不会报错。二、解决办法1改用安全函数 scanf_sVS专用可以使用 VS 编译器自带的安全输入函数scanf_s用法几乎和 scanf 一模一样。只是当字符串输入时需要额外加长度参数。#includestdio.h int main() { char ch; scanf_s(%c, ch, 1);// 字符最好加 长度参数 int i; scanf_s(%d, i); // 字符串必须加 长度参数 char str[5]; scanf_s(%s, str, 5);// 最后一个参数是数组大小 printf(ch %c\ni %d\nstr %s\n, ch, i, str); return 0; }从上面的例子看出使用 scanf_s 其实并不太方便一个是输入字符串时还需要再多输入一个参数另一个便是 scanf_s 是VS编译器专用的在其他平台上使用都会报错即不可跨平台。2关闭安全检查更好用通过翻译这张图可知只要在代码开头加一个宏定义便能关闭安全检查而这个宏定义便是#define _CRT_SECURE_NO_WARNINGS虽然这样的代码在 VS 编译器中会报警告但是运行时并不会报错。#define _CRT_SECURE_NO_WARNINGS #includestdio.h int main() { char ch; scanf(%c, ch, 1); int i; scanf(%d, i); char str[5]; scanf(%s, str, 5); printf(ch %c\ni %d\nstr %s\n, ch, i, str); return 0; }3将安全检查“永久”关闭最建议我们已经知道了在代码的开始加上宏定义 #define _CRT_SECURE_NO_WARNINGS 便能将安全检查关闭。那么我们能不能每次新建一个项目时在代码的开始便有这个宏定义具体方法如下首先下载一个十分好用的搜索软件Everthing怎么下载就不过多详述然后在这个软件中找到newcfile.cpp这个文件右键选择打开方式为笔记本将宏定义输入进去并保存。注意在保存时可能会提示没有足够的权限修改那么便右键该文件找到属性。点击安全找到编辑依次按照图中操作并确定。回到记事本再次保存就行了。当我们再次新建一个项目时VS编译器便已经定义宏了不需要自己每次都定义一遍。为什么要下Everthing? —— 由于每个人下VS的安装路径都不一样所以找 newcfile.cpp 的路径就不一样使用Everthing可以快速且准确的找到该文件所以还是很推荐大家下载这个搜索软件的。

更多文章