今天,我在使用scanf_s编写C语言程序,因为是在visual stidio 2013 只能使用建立C++程序,再将后缀名改成.c来实现。
ANSI中的的scanf(),在读取时不检查边界,可能会造成内存访问越界,例如分配了5字节的空间但是读入了10字节 。
  VS2013中也提供了scanf_s()。在调用时,必须提供一个数字以表明最多读取多少位字符,以便建立缓冲区接收输入信息,防止越界。这就要求程序在设计过程中就明确输入的长度。
  形如:

scanf(“%c”, &cha);
scanf(“%s”, buf);<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

  然而,并非是所有类型的输入都需要写出缓冲区长度。在使用过程中,我逐渐发现,整数和浮点数的输入不能写出缓冲区长度。其使用方式与scanf相同。
  形如:

scanf(“%d”, &x);
scanf(“%f”, &exp);
scanf(“%lf”, &xpow);

若后接数字,编译并不出错,但在运行过程中输入对应数据后将会出现错误。信息如下:
Unhandled exception at 0x1009E541 (msvcr120d.dll) in MyPro.exe: 
0xC0000005: Access violation writing location 0x00000008.

那么在连续输入不同类型的数据时,限定缓冲区大小的数字怎样排列呢?是的,紧跟在地址指针后面,中间用逗号相间隔。如果中间遇到整数、浮点数,则直接写下一个地址指针。(假设字符串大小为20)
形如:

scanf(“%s %c %d %s %f”, str1, 20, &cha1, 1, &integer1, str2, 20, &flo);

以下是MSDN中例子:

// crt_scanf_s.c// This program uses the scanf_s and wscanf_s functions// to read formatted input.#include <stdio.h>int main( void ){int i, result;float fp; char c, s[81];wchar_t wc, ws[81];result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1, &wc, 1, s, 80, ws, 80 );printf( "The number of fields input is %d\n", result );printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);result = wscanf_s( L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2, &wc, 1, s, 80, ws, 80 );wprintf( L"The number of fields input is %d\n", result );wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);return 0;}

scanf_s 用法相关推荐

  1. Visual Studio 2019报4996错误的解决办法

    错误原因:从VS2013开始,编译器将scanf和printf判定为不安全的方法,所以将会推荐使用scanf_s和printf_s方法.报错如图 解决办法: 在代码首行加入: #pragma warn ...

  2. C语言学习二:VS的使用

    Visual Studio环境 VS是Visual Studio,它是微软提供的一个工具集,由各种各样的工具组成.VS可以支持C/C++.VB.JAVA.C#编程.然了一次只能支持一种编程方式.在VS ...

  3. C语言scanf_s()函数的用法

    前言 今天开始学习C语言,看书学的挺快的,感觉很有趣,就想着敲下代码,结果错误百出,差点不想学了,果然编程是敲会的.下面说说第一个程序遇到的问题与心得 scanf_s()前身--scanf() 有的教 ...

  4. scanf_s()函数的用法

    鉴于CSDN的体验不是很好,本博客不再更新,更多内容请移步本人个人网站:https://www.youyou-2608.com scanf()在vs2013里报错,编译器提示要用scanf_s代替: ...

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

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

  6. c语言scanf s用法,C语言scanf与scanf_s

    C语言scanf与scanf_s0 我打编译器是microsoft visual studio 2005,我的源程序如下,注意注释的地方,就是scan函数中的scanf_s函数,程序运行正常,但是当输 ...

  7. fopen,fopen_s,fclose, _fcloseall函数用法

    2019独角兽企业重金招聘Python工程师标准>>> fopen函数的使用 在定义FILE * fp 之后,fopen的用法是: fp = fopen(filename," ...

  8. 解决scanf_s函数报错:没有为格式字符串传递足够的参数

    报错:scanf_s函数报错:没有为格式字符串传递足够的参数 int main() {char s1[20] = "i m name";char *p1, *p2;char s3[ ...

  9. VS2012 msvcr110d.dll xxxxxx处有未经处理的异常:0xC0000005:写入位置xxxxxx时发生访问冲突(scanf_s引起)-已解决

    源代码见<C程序设计>P307 Example9.7 功能为输入三名学生的学号.姓名.三科成绩,输出成绩最高的学生信息和其平均成绩. 源代码如下: #include<stdio.h& ...

最新文章

  1. 【Python】Excel处理
  2. oracle asm 日志,Oracle+RAC+ASM数据库ora-00257日志归档器错误解决方法
  3. 取文本索引所执向的值(简单)
  4. OpenCV Mat-基本图像容器
  5. 三、Python-列表
  6. [渝粤教育] 西北工业大学 博弈论基础 参考 资料
  7. 【重难点】【Java基础 06】浅克隆与深克隆、Object类的常用方法、util包下的接口
  8. 笨办法学 Python · 续 中文版
  9. 用代码排出自己的名字
  10. c语言上机字符串,二级C语言上机题库100套(最新)
  11. 《《《总结》》》PCL的42个实例整理:1~24
  12. 自己动手编写一个VS插件(一)
  13. tp-link无线路由与android手机无线连接设置指南,手机设置tplink无线路由器_tplink路由器手机设置步骤-192路由网...
  14. 魅族MX5 如何进入开发者模式
  15. 华为云CDN加速服务:让你体验不一样的云提速
  16. 机器学习之深度学习入门
  17. HDFS心跳机制是什么?
  18. selenium +eclipse+firefox/chrome 环境全套搭配
  19. discuz 模版 php函数,dz function template 函数解析
  20. linux个人网站制作教程,用LaTeX制作个人简历

热门文章

  1. [渝粤教育] 西南科技大学 人力资源管理 在线考试复习资料(1)
  2. 深剖VR,AR和MR三者之间关系
  3. PDF文件有编辑权限,怎么编辑PDF文件?
  4. 推荐 9 个免费图片网站,我的存货都在这了
  5. Kibana聚合操作
  6. python pil模块
  7. SpringBoot-21-统一日志框架
  8. hiveserver2 和beeline_Beeline连接Hiveserver2错误
  9. Docker 网络连通
  10. 通过pdf实现seo