国际标准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()函数的相关解决方案相关推荐

  1. C语言带空格的字符串输入——gets()函数、scanf()函数缺陷以及改进后的gets_s()函数、scanf_s()函数的简单用法(上)

    **在C语言中,带空格的字符串输入问题相对而言还是比较"坑"的,所以呢,小编就决定要专门谈一谈这个问题,希望对于初学者能够有所帮助. 该篇主要简述了C语言中gets()函数以及sc ...

  2. 详解c语言main函数、printf函数、scanf函数与va家族

    C语言入门与提升(1)--详解c语言main函数.printf函数与scanf函数,与va家族 前言: 为什么要学习C语言呢?C语言作为最古老的语言之一,走过了半个多世纪的风风雨雨,至今仍然长盛不衰, ...

  3. c语言中的输入输出函数之scanf函数

    目录 前言 scanf函数 定义 scanf函数一般形式 地址表列 格式字符串 * 域宽 长度修饰符 格式字符串中存在普通字符 scanf和scanf_s的区别以及vs解决scanf报错的另一种方法 ...

  4. c语言scarf函数原型,scanf 函数原型.doc

    scanf 函数原型.doc scanf 函数原型 scanf 函数原型 int scanf( const char *format, ... ); scanf()函数是格式化输入函数,它从标准输入设 ...

  5. printf函数和scanf函数

    写在前面: 在刚开始学习C语言的时候,用的比较多的两个库函数就是printf函数和scanf函数,但是好多同学在用的时候经常会犯一些没有注意到的小错误,但是有的时候这些小错误就是致命的.下来我们一起学 ...

  6. C语言/gets()函数和scanf()函数关于字符串的输入

    提示:本文是关于C语言字符串输入的两个函数的介绍 文章目录 前言 一.gets()函数 二.scanf()函数 总结 前言 在C语言中,有很多关于输入字符串的函数.在学习和使用C语言时,我们也无法避免 ...

  7. 8、C语言printf函数与scanf函数

    一.printf()函数 1.函数原型 标准格式化输出函数:函数可以按用户指定的格式,把指定的数据显示到显示器屏幕上 int printf(const char *format, ...) 参数1 : ...

  8. [C语言]printf函数和scanf函数的返回值

    先来看一道题 #include<stdio.h> int main() {int a=43;printf("%d\n",a);return 0; } 看完嘴角疯狂上扬, ...

  9. 【printf函数与scanf函数】(学习笔记5--标准I/O函数)

    标准I/O函数 一.printf函数 二.scanf函数 一.printf函数 printf函数通常被称为"格式化打印函数",它的第一个参数称为"格式化字符串" ...

最新文章

  1. linux 使用 C 语言获得系统 MAC 地址
  2. 最适合python程序员用的笔记本-作为一个Python程序员,电脑上应该具备哪些软件?...
  3. AWS SDK for Java 2.0 使用的基础入门
  4. error.html mp4,HTML Video error用法及代码示例
  5. USE PDFCREATE TO CREATE A PDF FILE
  6. Windows使用技巧
  7. 向Ubuntu提供反馈的5种方法
  8. python在材料模拟中的应用_材料模拟python_模拟-python模拟-在不妨碍实现的情况下修补方法...
  9. python requests和urllib_Python——深入理解urllib、urllib2及requests(requests不建议使用?)...
  10. python 爬虫基础(一)Beautifulsoup基础介绍
  11. psftp的用法(超级详细)
  12. 神舟bios更改第一启动项为u盘
  13. vm虚拟机做为pxe服务器,vm esxi创建的虚拟机怎么通过pxe启动
  14. 怎么获取jquery版本_获取jQuery版本
  15. mysql分组取最新时间的数据
  16. iTutorGroup学员获2018全国青少年创意编程大赛一等奖
  17. 集合相关题目0927
  18. C++ 实现一个复数类
  19. 温州又一知名企业宣布倒闭破产
  20. jQuery效果(隐藏和显示)

热门文章

  1. 滑动差分倒谱系数 matlab,【网安学术】基于音频特征参数的多语种分类算法
  2. Win10超详细 JavaJDK的安装(D盘)及环境配置
  3. uva 10808 - Rational Resistors
  4. 游戏一旦开始,结局就不是你能控制的!
  5. 项目案例:网上书店数据库设计
  6. Agisoft Metashape 照片高程改正 附python源码
  7. 令克软件格隆汇——携手推进合作,共创金融IT持续发展
  8. OK资本周子涵:区块链的成果是“熬”出来的
  9. 数据库系统原理--第2章作业2--习题答案
  10. 2022-11-08 Python基础知识 2