新壶装老酒之如何拯救哀怨的scanf老兵

本文讨论了在使用Visual Studio 2013时,scanf函数与平台不兼容导致的问题。通过解析scanf函数的基本功能、常见格式转换说明,并提供了两种解决方案来解决此问题:修改项目属性设置或使用scanf_s函数。同时,解释了为何微软官方建议使用scanf_s代替老旧的scanf函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      上一篇中,我说到自己写好的代码无法运行,具体原因就是因为scanf函数与visual studio 2013平台不兼容【我不清除最早的断层是从第几代开始,反正我的13是不能用的】。查了一下,微软官方给出的解释是老版scanf函数并不执行边界检查,往缓冲区里写入的数据如果过多,有可能会覆盖掉其它有用的内存。

      下图是具体的错误提示截图:


          在解决这种问题之前,我们首先来谈谈什么是scanf函数。scanf函数是C语言的一个格式化输入函数,在头文件stdio.h中被定义。是一个int类型的函数,把成功匹配的输入项作为返回值。其声明方式为【int scanf( char *format, ...)】,我们可以使用vs2013的goto definition选项来查看有关scanf具体信息。下面是scanf函数中几个常用的格式转换说明:

1)%d:十进制整数;

2)%u:无符号十进制整数;

3)%o:八进制整数,以0开头;

4)%x:十六进制整数,以0X开头;

5)%c:字符类型,将输入中的多个字符挨个存放到指定位置中;

6)%s:字符串类型,把整个输入存放在一个指定数组中【注意,它不用加地址引用&操作符】,字符串的末尾会自动补上'\0'字符;

7)%f:浮点数类型,可以包含正负号、小数点和指数部分;

OK,现在我们已经熟悉了scanf的功能和用法,那么应该怎么在vs2013这种高大上的环境中使用呢?本人虽不才,但至少可以提供两种解决方案。

第一种:左键单机您的项目选项卡,接着单机您的工程属性选项卡,在里面找到【C/C++】选项,把其中的【是否执行SDL检查】设置为否。如图所示:

第二种:在程序代码的开头处加上【#pragma warning(disable 4996)】即可,如图所示:


在这里必须要说一下第三种方案,这个也是微软官方给出的建议方案,那就是使用scanf_s来代替scanf,它的使用方法与scanf函数完全一致,唯一的不同是多了一个边界检查的功能,至于老版输入函数scanf,还是让她留在垂暮之年里回忆自己曾经的辉煌吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值