C语言中scanf与scnaf_s函数详解

 更新时间:2022年01月12日 11:04:33   作者:ღ°九三ฅ՞  
大家好,本篇文章主要讲的是C语言中scanf与scnaf_s函数详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

scanf_s

scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。在调用该函数时,可以提供一个数字以表明最多读取多少位字符。

MSDN上scanf_s的简单模型:int scanf_s( const char *format [, argument]...);一般我们常用的格式:scanf_s(输入格式,输入流 [,输入变量的大小(单位:字节)])返回值:int类型(正常读取返回1;读取异常返回0)

使用scanf_s

一个字符输入

int main()
{
	char n = 0;
	scanf_s("%c", &n, sizeof(n));

	printf("%c\n", n);

	return 0;
}

在这里插入图片描述

一个整型输入

int main()
{
	int n = 0;
	scanf_s("%d", &n, sizeof(n));

	printf("%d\n", n);

	return 0;
}

在这里插入图片描述

多个整形输入

int main()
{
	int n = 0;
	int m = 0;
	scanf_s("%d%d", &n, &m, sizeof(n), sizeof(m));

	printf("n = %d,m = %d\n", n, m);

	return 0;
}

在这里插入图片描述

注意:在scanf_s中多个输入的格式问题

在这里插入图片描述

一个字符数组输入

这里用%s输入一个字符数组时,最后的‘\0’是需要占1个字节的空间的;而当输入的长度超过了数组的长度时,scanf_s的安全检测就体现了,它直接返回0;printf也不会打印出来,只有一个空行,没有报错

int main()
{
	char arr[5] = { 0 };

	scanf_s("%s", arr, sizeof(arr));

	printf("%s\n", arr);

	return 0;
}

在这里插入图片描述

在这里插入图片描述

scanf

这是C语言标准库里面的一个函数,在VS底下使用这个会有警告,我们在文件开头加上:(#define _CRT_SECURE_NO_WARNINGS 1)或者 (#pragma warning(disable:4996)
就不会有警告了;

MSDN上scanf的简单模型:int scanf( const char *format [,argument]... );一般我们常用的格式:scanf(输入格式,输入流 )返回值:int类型(正常读取返回读取成功的元素个数;读取异常返回EOF)

使用scanf

一个整数输入

在这里插入图片描述

多个整数输入

在这里插入图片描述

字符数组输入

可以看到scanf在输入字符串的时候,并没有安全检测,而是会直接用了数组后面的栈空间,然后造成栈溢出的问题

在这里插入图片描述

在这里插入图片描述

总结

使用scanf_s函数虽然安全性比较高,但是可移植性差。scanf_s只能用在VS编译器上,而其他的用不了它scanf函数虽然没有scanf_s函数那么安全,但可移植性是比scanf_s强

到此这篇关于C语言中scanf与scnaf_s函数详解的文章就介绍到这了,更多相关C语言scanf与scnaf_s内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现多人聊天室

    C++实现多人聊天室

    这篇文章主要为大家详细介绍了C++实现多人聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++ 17转发一个函数调用的完美实现

    C++ 17转发一个函数调用的完美实现

    这篇文章主要给大家介绍了关于C++ 17如何转发一个函数调用的完美实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C++17具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • C++中高性能内存池的实现详解

    C++中高性能内存池的实现详解

    在 C/C++ 中,内存管理是一个非常棘手的问题,我们在编写一个程序的时候几乎不可避免的要遇到内存的分配逻辑。本文将通过C++实现高性能内存池,感兴趣的可以了解一下
    2022-10-10
  • 使用map实现单词转换的实例分析

    使用map实现单词转换的实例分析

    本篇文章是对使用map实现单词转换的代码实例进行了纤细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言商品销售系统源码分享

    C语言商品销售系统源码分享

    这篇文章主要为大家分享了C语言商品销售系统源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Qt之ui在程序中的使用-多继承法介绍

    Qt之ui在程序中的使用-多继承法介绍

    本文将介绍Qt之ui在程序中的使用-多继承法,需要的朋友可以参考
    2012-11-11
  • C语言实现酒店管理系统

    C语言实现酒店管理系统

    这篇文章主要为大家详细介绍了C语言实现酒店管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 快速学习六大排序算法

    快速学习六大排序算法

    这篇文章主要介绍了六大排序算法-插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序,需要学习的小伙伴可以参考这篇文章
    2021-08-08
  • C中的open(), write(), close(), fopen()详解

    C中的open(), write(), close(), fopen()详解

    本文主要介绍了C语言中的open(), write(), close(), fopen()等文件操作函数,open()函数用于打开文件,write()函数用于写入数据,close()函数用于关闭已打开的文件描述符
    2024-10-10
  • C语言开发实现井字棋及电脑落子优化示例详解

    C语言开发实现井字棋及电脑落子优化示例详解

    以前上课经常和同桌玩起井字棋,那么我们就当我们回忆童年,现在也用C语言来实现井字棋,本次代码相对于初阶的井字棋,在电脑下棋代码部分做了优化,使得电脑更加具有威胁
    2021-11-11

最新评论