您现在的位置是:群英 > 开发技术 > 编程语言
C语言的scanf和scanf_s函数用法是什么?
Admin发表于 2021-12-21 17:49:382112 次浏览

    这篇文章我们来了解C语言的scanf和scanf_s函数用法,一些朋友会认为scanf和scanf_s函数是一样的,其实两者有一定的区别,下文我们就来详细的了解看看,有需要的朋友可以参考,那么接下来就跟随小编来了解看看吧!

1.scanf_s(是vs提供的函数)

    a.代码1

int main()
{
	char a = 0;
	//scanf_s("%c", &a, 1);
	scanf_s("%c", &a, sizeof(a));
	return 0;
}

    scanf_s有三个参数,最后一个是变量a所占据空间的大小(单位为字节),这里可以写1,也可以写sizeof(a)。如果a为整型的话,第三个参数就为4,或者sizeof(a)。

    b.代码2

int main()
{
	char a = 0, b = 0;
	scanf_s("%c %c", &a, 1, &b, 1);
	printf("%c %c", a, b);
	return 0;
}

    可不要写成  scanf_s("%c%c",&a,&b,1,1); 这样会出错的

    c.代码3

int main()
{
	char arr1[5] = { 0 };
	scanf_s("%s", arr1, sizeof(arr1));
	printf("%s", arr1);
	return 0;
}

    注意:输入字符的个数时,一定是比数组的空间个数小的,比如像上面的代码只能输入1-4个字符,而不是5个,不然会出错的。(arr[4]装的应该是一个换行符)

    d.安全性检测

int main()
{
	char arr1[5] = { 0 };
	int c=scanf_s("%s", arr1, sizeof(arr1));
	printf("%d\n", c);
	printf("%s", arr1);
	return 0;
}

    如果输入的字符个数>=数组空间 个数,scanf_s的返回值就为0,反之则为1。

int main()
{
	char arr1[5] = { 0 };
	scanf_s("%s", arr1, sizeof(arr1));
	printf("%s", arr1);
	return 0;
}

     如果输入的字符个数>=数组空间 个数,是不会打印数组中的元素的。(而scanf函数就会打印出)

2.scanf(标准的库函数)

    a.代码1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	printf("%d", a);
	return 0;
}

    在VS13 17 19的版本下使用scanf函数一定在最开始(#define _CRT_SECURE_NO_WARNINGS),不然会报错的。

    b.安全性测试

int main()
{
	char arr1[5] = { 0 };
	int c=scanf("%s", arr1);
	printf("%d\n", c);
	printf("%s", arr1);
	return 0;
}

     当我们输入abcdefg 7个字符时(已经超出了数组的空间个数了),虽然可以打印出来,但是arr1附近的栈空间已被破坏了,出现越界的情况了。scanf_s不会打印出来,也就不存在越界的行为了。

    c.当在scanf函数里面输入格式符

    如%d %d(%d%d之间有空格),那么通过标准输入设备(键盘)输入时两个整型之间也加一个空格。

    如%d,%d(%d%d之间逗号),那么通过标准输入设备(键盘)输入时两个整型之间也加一个逗号。

3.总结

    使用scanf_s函数虽然安全性比较高,但是可移植性差。比如含有scanf_s函数的代码不一定在其它的编译器上能够跑过。

    scanf函数虽然没有scanf_s函数那么安全,但可移植性是比scanf_s强。

    scanf_s函数与scanf函数的使用与比较今天就分享到这里了,如果对你有帮助的话吗,可以给个关注,顺便给个赞。

    以上就是C语言的scanf和scanf_s函数用法的介绍,大家对scanf和scanf_s函数的使用区别应该也了解了吧,希望大家阅读完这篇文章能有所收获。最后,想要了解更多可以继续浏览群英网络其他相关的文章。

文本转载自脚本之家

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: scanf和scanf_s
相关信息推荐
2022-08-31 17:26:28 
摘要:利用js获取滚动条滚动距离,实现图片固定在屏幕的某个位置思路:1.获取对象距离顶部和左侧的距离;2.获取元素对象;3.当滚动条滚动时获取滚动条滚动的距离;4.滚动条滚动时执行函数:对象距离顶部 / 左侧的距离变为原本距离顶部 / 左侧的距离+滚动条滚动像素数。
2022-09-16 17:55:37 
摘要:html5中的废除标签:1、basefont,用于定义文档中所有文本的默认颜色、大小和字体;2、big,用来制作更大的文本;3、font,规定文本的字体、字体尺寸、字体颜色;4、s,对那些不正确、不准确或者没有用的文本进行标识;5、strike,定义加删除线文本;6、tt,定义打字机文本;7、u,定义下划线文本;8、frameset,定义一个框架集;9、dir,定义目录列表。
2022-07-22 17:44:58 
摘要:python画正方形的代码是【import turtle turtle.title("画正方形") turtle.pensize(5) turtle.pencolor("red") turtle.fillcolor("green")】。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部