scanf_s 用法
今天,我在使用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 用法相关推荐
- Visual Studio 2019报4996错误的解决办法
错误原因:从VS2013开始,编译器将scanf和printf判定为不安全的方法,所以将会推荐使用scanf_s和printf_s方法.报错如图 解决办法: 在代码首行加入: #pragma warn ...
- C语言学习二:VS的使用
Visual Studio环境 VS是Visual Studio,它是微软提供的一个工具集,由各种各样的工具组成.VS可以支持C/C++.VB.JAVA.C#编程.然了一次只能支持一种编程方式.在VS ...
- C语言scanf_s()函数的用法
前言 今天开始学习C语言,看书学的挺快的,感觉很有趣,就想着敲下代码,结果错误百出,差点不想学了,果然编程是敲会的.下面说说第一个程序遇到的问题与心得 scanf_s()前身--scanf() 有的教 ...
- scanf_s()函数的用法
鉴于CSDN的体验不是很好,本博客不再更新,更多内容请移步本人个人网站:https://www.youyou-2608.com scanf()在vs2013里报错,编译器提示要用scanf_s代替: ...
- C语言带空格的字符串输入——gets()函数、scanf()函数缺陷以及改进后的gets_s()函数、scanf_s()函数的简单用法(上)
**在C语言中,带空格的字符串输入问题相对而言还是比较"坑"的,所以呢,小编就决定要专门谈一谈这个问题,希望对于初学者能够有所帮助. 该篇主要简述了C语言中gets()函数以及sc ...
- c语言scanf s用法,C语言scanf与scanf_s
C语言scanf与scanf_s0 我打编译器是microsoft visual studio 2005,我的源程序如下,注意注释的地方,就是scan函数中的scanf_s函数,程序运行正常,但是当输 ...
- fopen,fopen_s,fclose, _fcloseall函数用法
2019独角兽企业重金招聘Python工程师标准>>> fopen函数的使用 在定义FILE * fp 之后,fopen的用法是: fp = fopen(filename," ...
- 解决scanf_s函数报错:没有为格式字符串传递足够的参数
报错:scanf_s函数报错:没有为格式字符串传递足够的参数 int main() {char s1[20] = "i m name";char *p1, *p2;char s3[ ...
- VS2012 msvcr110d.dll xxxxxx处有未经处理的异常:0xC0000005:写入位置xxxxxx时发生访问冲突(scanf_s引起)-已解决
源代码见<C程序设计>P307 Example9.7 功能为输入三名学生的学号.姓名.三科成绩,输出成绩最高的学生信息和其平均成绩. 源代码如下: #include<stdio.h& ...
最新文章
- 【Python】Excel处理
- oracle asm 日志,Oracle+RAC+ASM数据库ora-00257日志归档器错误解决方法
- 取文本索引所执向的值(简单)
- OpenCV Mat-基本图像容器
- 三、Python-列表
- [渝粤教育] 西北工业大学 博弈论基础 参考 资料
- 【重难点】【Java基础 06】浅克隆与深克隆、Object类的常用方法、util包下的接口
- 笨办法学 Python · 续 中文版
- 用代码排出自己的名字
- c语言上机字符串,二级C语言上机题库100套(最新)
- 《《《总结》》》PCL的42个实例整理:1~24
- 自己动手编写一个VS插件(一)
- tp-link无线路由与android手机无线连接设置指南,手机设置tplink无线路由器_tplink路由器手机设置步骤-192路由网...
- 魅族MX5 如何进入开发者模式
- 华为云CDN加速服务:让你体验不一样的云提速
- 机器学习之深度学习入门
- HDFS心跳机制是什么?
- selenium +eclipse+firefox/chrome 环境全套搭配
- discuz 模版 php函数,dz function template 函数解析
- linux个人网站制作教程,用LaTeX制作个人简历