保姆级,手把手教你解决微软Visual Studio 2022的scanf()返回值被忽略问题(每个步骤都配图且标记)

    关于这个问题也是对于小白的我困惑的很是难受,也是收集了一些这方面的信息,基本上都是干货就,若是有不足和疏忽错误的地方还望见谅~

首先就是第一个解决方法:

在输入时将scanf改输入为scanf_s,也就是在后面加上_s

这是因为由于编译器Visual Studio 的原因Microsoft公司觉得scanf不安全因此自定义的scanf_s,在ANISC中只有scanf(),没有scanf(),因此会导致跨平台具有了一定的局限性,在通常跨平台时会出现报错的现象,所以第一种方法是不推荐的;这里的安全性也间接体现了解决的方法,后面会将到;

第二个解决方法:

 打开Visual Studio 2022,点击上方调试窗口,最下面一行有一个调试属性,前面的是文件名点击进入。

 在常规选项中找到SDL检查是(/sdl)更改为否(/sdl-), 这里还没结束接着看下一个更改的地方。

 仍然是在这个选项卡中,依次找到代码生成安全检查,将启用安全检查(/GS)改为禁用安全检查(/GS-),到这里第二种方法就结束了,但这个方法也有一定的局限性,就是只会在当前这个项目文件夹(就是前面所说到的调试属性的那串字符)有这个效果不报错。如果你觉得麻烦以后都不想再去因为这个问题提前设置这些东西,还有更好的方法,就是设置时可能会比较麻烦,但有详细配图,手把手,包教会!

 第三个解决方法:

这里有两个点,暂时性解决/永久性解决

暂时性解决:

在所创建的文件第一行加入一行代码:#define _CRT_SECURE_NO_WARNINGS 1

 可以完美的解决scanf()的问题且在这个文件中所有的scanf都不需要加_s即可运行代码,但问题是总不能在每一次建立新文件时都去加这一行代码吧!未必有点太麻烦了,这时我们要想办法让他在生成每一个文件时都自动生成这个文件,不就完美解决了嘛~

永久性解决:

大概思路就是我们要找到我们所安装的位置Visual Studio并找到一个叫newc++file的文件并更改它

看图:

右击鼠标点开属性,可看到文件位置并打开此位置;

 

此时我们会进入到文件的位置,但这里有一个点需要注意

打开文件时只会在IDE这里我们加上\VC\VCProjectltems即可看到newc++file这个文件夹;

 此时鼠标右键以记事本的方式打开,进去之后空白的,这时就需要我们输入前面提到的那段代码

#define _CRT_SECURE_NO_WARNINGS 1

但此时又出现了一个问题,我也有遇到过就是我们把代码输入进去之后出现了一个现象无法保存,大多数是由于没有权限问题,我来分享一下我的解决方法:

首先以w11为例

首先回到桌面,按win键 对记事本以右击鼠标,并以管理员的身份运行,此时我们再次返回到newc++file文件打开并输入复制好的代码,此时就可以完美保存了,这时他会提示你是否替换,点击确定替换就OK啦~ ,再次重新点开Visual Studio 在新建的文件中第一行就会自动生成

#define _CRT_SECURE_NO_WARNINGS 1

此时所有的我已知的方法就完了,如果大家有更好的方法或者建议可在评论区讨论呦~

### VS2022 中 `scanf` 返回值忽略解决方案 在 Visual Studio 2022 (VS2022) 中,当使用 `scanf` 函数时,编译器通常会发出警告,指出返回值忽略。这是因为 `scanf` 的确存在潜在的安全隐患[^2]。 #### 使用 `scanf_s` 一种常见的解决办法是将 `scanf` 替换为更安全的替代品——`scanf_s`。此函数由 Microsoft 定义,在功能上类似于 `scanf`,但在参数验证方面更为严格,从而提高了安全性[^3]。 ```cpp #include <stdio.h> int main() { int number; printf("Enter an integer: "); // Use scanf_s instead of scanf to avoid warnings and improve safety. scanf_s("%d", &number); printf("You entered %d\n", number); return 0; } ``` 然而需要注意的是,这种方法虽然解决了当前环境下的问题,但由于其特定于微软平台的特点,降低了程序跨不同开发工具链使用的便利性。 #### 关闭特定警告 另一种方式是在项目设置里关闭与此相关的警告信息。通过预处理器指令可以实现这一点: ```cpp #define _CRT_SECURE_NO_WARNINGS ``` 这行代码应当放置在所有头文件包含语句之前的位置。它告诉编译器忽略与 C 运行库中的某些“不推荐”的 API 相关的安全性警告,其中包括 `scanf` 的情况[^4]。 对于希望保持原有语法结构而不引入新函数的情况来说,这是一个简单而有效的方法。不过这样做也意味着放弃了来自编译系统的额外保护层,因此开发者应谨慎评估风险并确保采取适当措施防止可能出现的数据溢出等问题
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

over-perform

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值