scanf与scanf_s函数的使用 详解

article/2025/9/28 1:06:06

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, sizeof(a), &b, sizeof(b));printf("%c %c", a, b);return 0;
}

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

c.代码3

int main()
{int a = 0;int b = 0;scanf_s("%d %d", &a, &b, sizeof(a),sizeof(b));printf("%d %d", a, b);return 0;
}

 

 注意:如果输入整型数据,scanf函数的里面的sizeof()是在所有取地址的后面,而输入字符,每个取地址后面需要有一个sizeof()

d.代码3

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

注意:输入字符的个数时,一定是比数组的空间个数小的,比如像上面的代码只能输入1-4个字符,而不是5个,不然会出错的。(arr[4]装的是一个'\0',字符串结束标志)

e.代码4

int main()
{int a[5] = { 0 };for (int i = 0; i < 5; i++){scanf_s("%d", &a[i], sizeof(a[i]));}for (int i = 0; i < 5; i++){printf(" %d", a[i]);}return 0;
}

注意一点的是 那个取地址符(&)不要忘写了。

f.安全性检测

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.返回值测试

代码1:

int main()
{int a = 0;int ret=scanf("%d", &a);printf("%d\n", ret);return 0;
}

 

代码2: 

int main()
{int a = 0;int b = 0;int ret = scanf("%d %d", &a,&b);printf("%d\n", ret);return 0;
}

代码3: 

int main()
{char a = 0;int ret=scanf("%c", &a);printf("%d", ret);return 0;
}

 

代码4:

int main()
{char a = 0;char b = 0;int ret = scanf("%c%c", &a,&b);printf("%d", ret);return 0;
}
//int main()

 

代码5:

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

总结:scanf函数的返回值与函数里面格式符的个数有关 ,返回值即格式符的个数。

c.安全性测试

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不会打印出来,也就不存在越界的行为了。

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

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

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

3.总结

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

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

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


http://chatgpt.dhexx.cn/article/yUkhNU8l.shtml

相关文章

【opencv4】opencv视频教程 C++(opencv教程)1、opencv介绍和环境搭建

下一讲&#xff1a;【opencv4】opencv视频教程 C&#xff08;opencv教程&#xff09;2、加载&#xff0c;修改&#xff0c;保存图像 [opencv_C] 入门强推&#xff01;&#xff01;&#xff01;【B站最全】 文章目录 opencv介绍和环境搭建opencv组成架构核心模块环境搭建&#…

Opencv的使用教程,opencv比较全的基础教程

*免责声明: 1\此方法仅提供参考 2\搬了其他博主的操作方法,以贴上路径. 3* 场景一:Opencv对图像视频的基本使用 场景二:Opencv对图像视频进一步处理 场景三:Opencv对图像视频高级处理 . . . 课程视频 课程视频2 ubuntu18下采用源码编译的方式安裝opencv / 简单方式安装 …

VC2015搭建OpenCV环境(超详细教程)

1、首先下载OpenCV源码库 ① https://sourceforge.net/projects/opencvlibrary/?sourcetyp_redirect ②双击运行.exe文件&#xff0c;导出源代码 2、windows环境变量设置&#xff08;测试环境是win7 64位&#xff09; ①找到系统高级设置path 右键计算机--》属性--》高级系…

OpenMV IDE安装使用教程

一、什么是OpenMV OpenMV是一个开源&#xff0c;低成本&#xff0c;功能强大的机器视觉模块。以STM32F427CPU为核心&#xff0c;集成了OV7725摄像头芯片&#xff0c;在小巧的硬件模块上&#xff0c;用C语言高效地实现了核心机器视觉算法&#xff0c;提供Python编程接口。使用者…

OpenMV使用技巧

目录 一、光照影响1. 光照过强2. 光照过弱 二、杂框影响1. threshold参数2. 长宽比 三、画图 一、光照影响 OpenMV在使用过程中可能会遇到光照太强或者光照太弱等影响图像识别的情况&#xff0c;尤其在跑神经网络模型时&#xff0c;光照太强或太弱对识别结果的影响是致命的。 …

VC++6.0配置opencv1.0教程(全网最详细)附加图文

VC6.0配置opencv1.0教程&#xff08;全网最详细&#xff09;附加图文 &#xff08;&#xff08;很多评论我没时间看&#xff0c;tiquma写出来了&#xff0c;有兴趣的同学自己找一找8&#xff09; 配置前 第一次写博客&#xff0c;激动٩(๑>◡<๑)۶&#xff0c;坐标武…

C/C++ vs2017 OpenCV简单入门

离职之际&#xff0c;自学一下图像相关的知识点&#xff0c;只是简单学了一点皮毛&#xff01; 目录 一、 OpenCV环境搭建 二、使用opencv 常用接口说明 使用案例 1. 图像色彩空间转换 2. Mat对象的创建与赋值 3. 图像像素的读写操作 4. 图像像素的算术操作 5. 滚动条…

VS2017搭建OpenCV环境(新手详细教程)

整体流程如下&#xff1a; 下载Visual Studio2017版本下载OpenCV3.4.1版本配置环境变量在Visual Studio2017中引入头文件、库文件、链接库环境测试 说明&#xff1a;没有必要根据博主的博客下载与博客相应的版本&#xff0c;不同版本之间只需要改一点点东西即可 1、下载安装V…

《OpenCV联合C++》第一课:OpenCV下载及环境配置

1.下载OpenCV软件 官网下载Releases - OpenCV 下载对应文件即可 下载后导出到本地 导出中。。。 2.环境变量配置 导入对应文件夹下面路径..\opencv\build\x64\vc15\bin 3.文件夹内文件拷贝指定路径 打开文件夹下面路径.\opencv\build\x64\vc15\bin 将bin目录下面的opencv_wor…

OpenCV入门教程,超详细OpenCV入门教程!10小时让你轻松掌握opencv的使用

OpenCV是一个基于BSD许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语言的接…

VS+OpenCV+VC超详细的配置教程

写在前面的话 版权声明&#xff1a;转载请注明出处&#xff01;博主是一个小菜鸟&#xff0c;并且非常玻璃心&#xff01;如果文中有什么问题&#xff0c;请友好地指出来&#xff0c;博主查证后会进行更正。每篇文章都是博主现阶段的理解&#xff0c;如果理解的更深入的话&…

OpenMV入门介绍

目录 一、OpenMV是什么二、OpenART mini与OpenMV对比三、图像处理背景知识1.像素和分辨率2. 帧率3.RGB三原色4.LAB颜色空间 四、OpenMV图像处理方法1.感光元件自动增益/白平衡/曝光窗口ROI 2.画图画线画框画圆画十字写字示例 3. 寻找色块&#xff08;颜色识别&#xff09;find_…

最新opencv-c++安装及配置教程(VS2019 C++ opencv4.4.0)

以前写过opencv python的安装教程&#xff0c;后来有一些同学开始私信我如何安装及配置opencv c。 本文是以最新的版本入手&#xff0c;一步步详解opencv c 的安装及配置过程。&#xff1a; 第一步&#xff0c;下载解压opencv 算法库 进入到以下链接&#xff1a;https://opencv…

超详细:VS配置OpenCV教程,需要收藏

目录 安装环境说明 下载OpenCV 配置OpenCV开发环境 属性表 测试 可能存在的问题 安装环境说明 操作系统&#xff1a;Windows10 OpenCV版本&#xff1a;OpenCV2和OpenCV3 VS版本&#xff1a;VS2015或者VS2017 下载OpenCV OpenCV下载地址&#xff1a;Home - OpenCV或者直…

【OpenCV教程合集版】一文入门和精通OpenCV(C/C++)

文章目录&#xff08;OpenCV版本4.6.0&#xff09; 1.数据类型2.矩阵基本操作2.1 全零矩阵2.2 全一矩阵2.3 单位矩阵2.4 矩阵转置2.5 求逆矩阵2.6 逗号式分隔创建矩阵2.7 矩阵定义(只列出常用的)2.7.1 数据类型Scalar 2.8 通过ptr与at函数遍历矩阵2.8.1 Vec类型 2.9 通过迭代器…

openCV超详细入门教程(python版)

涉及内容&#xff1a; 背景提取颜色过滤边缘检测用于对象识别的特征匹配一般对象识别 你将需要两个主要的库&#xff0c;第三个可选&#xff1a;python-OpenCV&#xff0c;Numpy 和 Matplotlib。 一、加载图片 首先&#xff0c;我们正在导入一些东西&#xff0c;我已经安装了…

OpenCV的简单使用教程与基本函数(C++版本)

OpenCV的简单使用教程&#xff08;C&#xff09; OpenCV简介OpenCV的使用基础打开、显示和保存图像图像存储变量 Mat类图像元素的存储读入图像文件创建Mat类复制Mat类图像元素的访问OpenCV画图命令行交互界面 OpenCV简介 OpenCV是一个开源发行的跨平台计算机视觉和机器学习软件…

OpenMV入门

1. 什么是OpenMV OpenMV 是一个开源&#xff0c;低成本&#xff0c;功能强大的 机器视觉模块。 OpenMV上的机器视觉算法包括 寻找色块、人脸检测、眼球跟踪、边缘检测、标志跟踪 等。 以STM32F427CPU为核心&#xff0c;集成了OV7725摄像头芯片&#xff0c;在小巧的硬件…

OpenMV零基础教程

一、资料导航 “工欲善其事&#xff0c;必先利其器”。在正式学习OpenMV之前&#xff0c;你必须知道一条或几条OpenMV的学习途径。这里推荐星瞳科技的中文官网教程&#xff0c;这个教程里面包括了OpenMV IDE的下载和安装、OpenMV上手教程、OpenMV中文文档、OpenMV详细参数以及O…

C++版本OpenCv教程

C版本OpenCv教程(一)Mat—基本的图像容器 目标 我们有多种方法从现实世界获取数字图像:数码相机、扫描仪、计算机断层扫描和磁共振成像等等。在以上任何情况下&#xff0c;我们(人类)看到的都是图像。然而&#xff0c;当将其转换到我们的数字设备时&#xff0c;我们所记录的是…