新壶装老酒之如何拯救哀怨的scanf老兵
来源:互联网 发布:编程C 最大公约数 编辑:程序博客网 时间:2024/04/27 23:39
上一篇中,我说到自己写好的代码无法运行,具体原因就是因为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,还是让她留在垂暮之年里回忆自己曾经的辉煌吧
- 新壶装老酒之如何拯救哀怨的scanf老兵
- 哀怨
- 瞧那哀怨的眼神
- 新瓶装老酒的尝试
- 如何拯救你的CRM?
- 一个IT老兵六年的折腾之路!
- 聪明人如何拯救你的职业困境?
- 如何拯救你的职业困境?
- 如何拯救你,我的猿猿君?
- 如何拯救在迷途上的SEOer ?
- 程序猿自救指南之——如何拯救你的颈椎
- 程序猿自救指南之——如何拯救你的颈椎
- 程序猿自救指南之——如何拯救你的颈椎
- 与老兵的谈话!
- 比特币老兵之续集
- 一个老兵妻子的绝境
- 十年游戏老兵,如何开发出一款受索尼青睐的VR游戏?
- 如何拯救数据库Sybase
- PhpExcel中文帮助手册|PhpExcel使用方法
- Map<K,V>根据值得到键
- 【DP】秘密文件
- RedHat5.7 yum更换为CentOS yum
- UML-用例图
- 新壶装老酒之如何拯救哀怨的scanf老兵
- Java面向对象之抽象类、接口、内部类、枚举类详解
- MySQL创建新用户时登录出错(ERROR 1045)
- quicksort算法思想
- Mysql中下划线表示匹配任意字符
- odb访问
- tar常用解压命令使用
- 在jsp中嵌入Java以及jsp中变量表达式值的输出
- java进阶(一)------java编程规范---命名约定