【C语言:精准打击】scanf_s()函数与scanf()函数的相关解决方案
国际标准ANSI C中没有scanf_s()函数,只有scanf()函数,scanf()函数在读取时不检查边界,所以可能会造成内存泄露。故VC++2005/2008中提供了scanf_s()函数,在调用时,必须提供一个数字n以表明最多读取多少位字符。
1. scanf()函数
scanf()函数是库stdio.h中的一个函数,scanf ()函数功能是“通过外界键盘给源代码中的变量赋值”。该函数有两种用法,分别是:
① scanf(“输入控制符”, 输入参数);
功能:将从外界键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
#include <stdio.h>int main()
{int a = 0;int b = 0;int sum = 0;scanf("%d%d", &a, &b);//%d%d应该连续挨着且中间无其他符号sum = a + b;printf("sum = %d",sum);return 0;
}
常用输入控制符
% d 十进制有符号整数
% u 十进制无符号整数
% f 浮点数
% s 字符串
% c 单个字符
% p 指针的值
% e 指数形式的浮点数
% x 无符号以十六进制表示的整数
% 0 无符号以八进制表示的整数
% g 自动选择合适的表示
② scanf(“非输入控制符+输入控制符”, 输入参数);
不推荐这种用法,因为scanf()函数和printf()函数在这种情况下不一样,scanf()函数需要把双引号""的内容完整输入才能使用此函数②功能,故也不推荐使用\n在scanf()函数中。
注意:在使用scanf ()函数功能①中,虽然没有加任何“非输入控制符”,但是从键盘输入数据时,给多个变量赋的值之间一定要用空格、回车或者 Tab 键隔开,用以区分是给不同变量赋的值。而且空格、回车或 Tab 键的数量不限,只要有就行。一般都使用一个空格。此外强调一点:当用 scanf()函数给多个变量赋值时,scanf 中双引号内多个“输入控制符”之间千万不要加逗号。
scanf("num=%d%,d"\n, &a, &b);//错误示范
2. scanf_s()函数
对于使用visual studio的使用者,大概率会出现scanf()函数报错,进而解决方案中推荐使用scanf_s()函数。scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。在调用该函数时,必须提供一个数字以表明最多读取多少位字符。
① scanf_s(“输入控制符”, 输入参数,n);
前面与scanf()函数一致,唯一不同就是scanf_s()函数最后一个参数n是接收缓冲区的大小(即输入参数的内存容量),表示最多读取n-1个字符。
3. 对于VS中报错的解决方案
①scanf()函数替换为scanf_s()函数
该方案适用于为了使内存不泄露,更加细节地控制内存使用。
②源代码第一行加上#define _CRT_SECURE_NO_WARNINGS 1
该方案使用初学者更好的学习scanf()函数,以免出现scanf_s()函数因内存误差而导致内存不足,进而报错。
#define _CRT_SECURE_NO_WARNINGS 1//内存不足报错示例
0x00007FFA515FFE49 (ucrtbased.dll)处(位于 Project_C.exe 中)引发的异常: 0xC0000005: 写入位置 0x000000BC80100
【C语言:精准打击】scanf_s()函数与scanf()函数的相关解决方案相关推荐
- C语言带空格的字符串输入——gets()函数、scanf()函数缺陷以及改进后的gets_s()函数、scanf_s()函数的简单用法(上)
**在C语言中,带空格的字符串输入问题相对而言还是比较"坑"的,所以呢,小编就决定要专门谈一谈这个问题,希望对于初学者能够有所帮助. 该篇主要简述了C语言中gets()函数以及sc ...
- 详解c语言main函数、printf函数、scanf函数与va家族
C语言入门与提升(1)--详解c语言main函数.printf函数与scanf函数,与va家族 前言: 为什么要学习C语言呢?C语言作为最古老的语言之一,走过了半个多世纪的风风雨雨,至今仍然长盛不衰, ...
- c语言中的输入输出函数之scanf函数
目录 前言 scanf函数 定义 scanf函数一般形式 地址表列 格式字符串 * 域宽 长度修饰符 格式字符串中存在普通字符 scanf和scanf_s的区别以及vs解决scanf报错的另一种方法 ...
- c语言scarf函数原型,scanf 函数原型.doc
scanf 函数原型.doc scanf 函数原型 scanf 函数原型 int scanf( const char *format, ... ); scanf()函数是格式化输入函数,它从标准输入设 ...
- printf函数和scanf函数
写在前面: 在刚开始学习C语言的时候,用的比较多的两个库函数就是printf函数和scanf函数,但是好多同学在用的时候经常会犯一些没有注意到的小错误,但是有的时候这些小错误就是致命的.下来我们一起学 ...
- C语言/gets()函数和scanf()函数关于字符串的输入
提示:本文是关于C语言字符串输入的两个函数的介绍 文章目录 前言 一.gets()函数 二.scanf()函数 总结 前言 在C语言中,有很多关于输入字符串的函数.在学习和使用C语言时,我们也无法避免 ...
- 8、C语言printf函数与scanf函数
一.printf()函数 1.函数原型 标准格式化输出函数:函数可以按用户指定的格式,把指定的数据显示到显示器屏幕上 int printf(const char *format, ...) 参数1 : ...
- [C语言]printf函数和scanf函数的返回值
先来看一道题 #include<stdio.h> int main() {int a=43;printf("%d\n",a);return 0; } 看完嘴角疯狂上扬, ...
- 【printf函数与scanf函数】(学习笔记5--标准I/O函数)
标准I/O函数 一.printf函数 二.scanf函数 一.printf函数 printf函数通常被称为"格式化打印函数",它的第一个参数称为"格式化字符串" ...
最新文章
- linux 使用 C 语言获得系统 MAC 地址
- 最适合python程序员用的笔记本-作为一个Python程序员,电脑上应该具备哪些软件?...
- AWS SDK for Java 2.0 使用的基础入门
- error.html mp4,HTML Video error用法及代码示例
- USE PDFCREATE TO CREATE A PDF FILE
- Windows使用技巧
- 向Ubuntu提供反馈的5种方法
- python在材料模拟中的应用_材料模拟python_模拟-python模拟-在不妨碍实现的情况下修补方法...
- python requests和urllib_Python——深入理解urllib、urllib2及requests(requests不建议使用?)...
- python 爬虫基础(一)Beautifulsoup基础介绍
- psftp的用法(超级详细)
- 神舟bios更改第一启动项为u盘
- vm虚拟机做为pxe服务器,vm esxi创建的虚拟机怎么通过pxe启动
- 怎么获取jquery版本_获取jQuery版本
- mysql分组取最新时间的数据
- iTutorGroup学员获2018全国青少年创意编程大赛一等奖
- 集合相关题目0927
- C++ 实现一个复数类
- 温州又一知名企业宣布倒闭破产
- jQuery效果(隐藏和显示)