strcpy_s、sptintf_s与strcat_s的使用

strcpy_s、sptintf_s与strcat_s是strcpy、sptintf与strcat的安全版本,均是通过指定缓冲区长度来避免存在的溢出风险。

strcpy_s 与strcpy

strcpy_s和strcpy函数的功能几乎是一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。

这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。
三个参数时:
                        errno_t strcpy_s(char *strDestination,size_t numberOfElements,const char *strSource);
两个参数时:
                       errno_t strcpy_s(char(&strDestination)[size],const char *strSource); // C++ only
例子:

#include<iostream>
#include<cstring>
using namespace std;void Test(void)
{char *str1 = NULL;str1 = new char[20];char str[7];strcpy_s(str1, 20, "hello world");//三个参数strcpy_s(str, "hello");//两个参数但如果:char *str=new char[7];会出错:提示不支持两个参数cout << "strlen(str1):" << strlen(str1) << endl << "strlen(str):" << strlen(str) << endl;printf(str1);printf("\n");cout << str << endl;
}int main()
{Test();return 0;
}
结果:

strlen(str1):11
strlen(str):5
hello world
hello
请按任意键继续. . .

sptintf_s与sptintf

sprintf
定义:
int sprintf( char *buffer, const char *format [, argument] ... );
常见用法

//把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"
可以指定宽度,不足的左边补空格:
sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"
当然也可以左对齐:
sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"
也可以按照16 进制打印:
sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐
sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐


sprintf_s
int sprintf_s( char *buffer, size_t sizeOfBuffer, const char *format [, argument] ... );

#include<iostream>
#include<cstring>
using namespace std;int main()
{char filename[1024];//需要预先分配缓冲区char path1[128] = "D:\\Program\\Tesseract-OCR\\tesseract.exe";char path2[128] = "D:\\Program\\Tesseract-OCR\\";char path3[128] = "D:\\Program\\Tesseract-OCR\\txt";char path4[128] = "-l chi_sim";sprintf_s(filename,sizeof(filename), "%s %s %s %s", path1, path2, path3, path4);cout << filename;return 0;
}

strcat_s与strcat

        原形:

              errno_t strcat_s(char *strDestination,size_t numberOfElements,constchar *strSource);
                extern char *strcat(char *dest,char *src);

strDestination要为strSource留下足够的内存,具体为:

假设strDestination为一个数组的话,

sizeof(strDestination)>=sizeof(strSource)+strlen(strDestination);

numberOfElements=sizeof(strDestination)

举例说明二者的区别:

char szBuf[3] = {0};
       strcat_s(szBuf, 3, "kdfdfj"); // 第一种连接字符串方法
       strcat(szBuf, "kdfdfj"); // 第二种连接字符串方法
      对于这两个例句,你仔细看就会发现他们有缓冲区溢出的问题.
        而用第一个函数则不同,它会抛出一个异常。
         但使用第二个函数的结果则不能确定,因为它可能会错误地改变了程序中其他部分的内存的数据,有可能不会抛出异常,但         会导致程序数据错误,也可能由于非法内存访问抛出异常
使用规范:
  char string[20]="123";
 strcat_s(string,sizeof(string),"456");
 printf("%s",string);这样20个元素,足够装下123456了。
注:以上三个安全函数取缓冲大小numberOfElements时,都可以取成前面那个strDestination的字节大小。
另外我们要注意strDestination到底是指针还是数组,注意二者sizeof的区别,可以混上strlen一起使用。
参考例子:《自定义String》
 





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米一键上锁工具_小米首款高端全自动智能锁火热预售中,一触开启全自动时代...

近些年&#xff0c;随着科技的发展&#xff0c;人工智能逐渐走入大众视野。人类社会也正从信息时代向“智能时代”过渡&#xff0c;在整个过程中智能家居领域的蓬勃发展可谓当仁不让&#xff0c;一直备受用户瞩目。智能锁作为家的第一道守护防线&#xff0c;家庭物联网入口的关…

Eigen+suitesparse for windows 安装

Eigen是著名的C矩阵运算库&#xff0c;提供了许多矩阵运算的接口&#xff0c;主要包括两大部分&#xff0c;一部分是稠密矩阵&#xff0c;另一部分是稀疏矩阵。Eigen以源码形式提供给大家&#xff0c;用的时候&#xff0c;只要将源码包含在项目的包含路径上&#xff0c;具体安装…

软件盘控制的问题

2019独角兽企业重金招聘Python工程师标准>>> 在全屏模式或者是沉寝室标题栏 方案一&#xff1a;全屏模式 1.软键盘被EditText遮挡住了&#xff0c;如果说EditText被嵌套在有滑动的视图中,采取的方式是: activity中设置此属性 android:windowSoftInputMode"…

python语言学习零基础教学视频_Python告白小白视频教程(零基础入门)

1 Python编程基础入门篇通过本次课程的学习&#xff0c;我们每个人都可以进入python世界里&#xff0c;从简单到高级&#xff0c;让人人都能学会python&#xff0c;我们在学习的时候&#xff0c;python让我们的运维变得更有乐趣&#xff0c;让我们的运维更加的高大上&#xff0…

SQL 快速入门2.1

MySQL top&#xff08;MySQL limit&#xff09;语法 SELECT column_name(s) FROM table_name LIMIT number 例子 SELECT * FROM Persons LIMIT 5 SQL LIKE 操作符 SQL LIKE 操作符语法 SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern 原始的表 (用在例…

sencha touch 入门系列 (一)sencha touch 简介

参考链接:http://mobile.51cto.com/others-278381.htm Sencha touch 是基于JavaScript编写的Ajax框架ExtJS,将现有的ExtJS整合JQTouch、Rapha&euml;l库&#xff0c;推出适用于最前沿Touch Web的移动应用开发框架&#xff0c;该框架是世界上第一个 基于HTML5的Mobile App框架…

求二叉树的深度和宽度

// 求二叉树的深度和宽度.cpp : 定义控制台应用程序的入口点。 <pre name"code" class"cpp">#include <iostream> #include <queue> using namespace std;struct BTNode {char m_value;BTNode *m_left;BTNode *m_right; };//先序创建二叉…

汉堡包

在我们结对的这些天里&#xff0c;我清晰的感受到同伴对我的帮助&#xff0c;每当我有不懂的时候她都会积极的帮助我&#xff0c;也会听取我的意见积极配合我&#xff0c;在我懒惰的时候也能够提醒督促我&#xff0c;我想这些只有结对时才能体会到。我们都知道&#xff0c;结对…

zabbix自动发现监控磁盘(iops和读写量)

2019独角兽企业重金招聘Python工程师标准>>> 对于磁盘有个iops的概念比较奇怪&#xff0c;想监控起来看下&#xff0c;利用zabbix的自动发现把每个磁盘的iops监控起来&#xff0c;思路&#xff1a;自动发现所有的磁盘&#xff0c;然后监控各个磁盘的iops。效果如下图…

一个表单同时向两个页面传值

现在有一个表单<form action"AddNewstu.asp" METHOD"POST" ><INPUT TYPE "Text" NAME "name" SIZE "20"><BR></FORM>此表单向AddNewstu.asp页面传入了一个name的值&#xff0c;如果同时把name…

matlab内置函数fitgeotrans与transformPointsForward解析

最近研究3000fps的实现&#xff0c;看了网上给的一个matlab代码&#xff0c;里面有提到init_shape到mean_shape的对齐&#xff0c;里面使用了fitgeotrans和transformPointsForward两个函数。于是参考matlab help研究了一下这两个函数. fitgeotrans函数 语法: tform fitgeotr…

【电脑使用经验】怎么查看无线网络中电脑的IP地址?

1、 2、 3、 4、 5、 转载于:https://www.cnblogs.com/happykoukou/p/4437111.html

win8硬盘安装Ubuntu14.04双系统參考教程

硬盘安装&#xff0c;无需光盘、U盘。win8为主。Ubuntu14.04为辅。可将Windows或Ubuntu设置为开机默认启动项。在Ubuntu下可查看、操作Windows系统下的文件&#xff1b;适用于安装和14.04版本号相近的Ubuntu系统。假设以上所述正是你所须要的。那么这可能是一篇您值得參考的教程…

oracle nvarchar2,varchar2,char,nchar说明

char(size)&#xff1a; 数据长度为size&#xff0c;不足的用空格补&#xff0c;超出后报错。char类型的数据最大长度是2000字节或字符&#xff0c;每个字符长度依赖于数据库字符集&#xff0c;数据按字符存储还是字节存储取决于nls_length_semantics参数。如果每个字符占两个字…

散列表查找失败平均查找长度_Python数据结构与算法56:排序与查找:冲突解决方案...

注&#xff1a;本文如涉及到代码&#xff0c;均经过Python 3.7实际运行检验&#xff0c;保证其严谨性。本文阅读时间约为6分钟。前面说过&#xff0c;如果两个数据项被散列映射到同一个槽&#xff0c;需要一个系统化的方法在散列表中保存第二个数据项&#xff0c;这个过程被称为…

Face Alignment by 3000 FPS系列学习总结(一)

广播&#xff1a; 如今的opencv已经提供了LBF的训练和测试代码&#xff0c;推荐阅读 《使用OpenCV实现人脸关键点检测》 face alignment 流程图 train阶段 测试阶段 预处理 裁剪图片 tr_data loadsamples(imgpathlistfile, 2); 说明&#xff1a; 本函数用于将原始图片取…

acm常见算法及例题

1 acm常见算法及例题2 3 初期:4 一.基本算法:5 (1)枚举. (poj1753,poj2965)6 (2)贪心(poj1328,poj2109,poj2586)7 (3)递归和分治法.8 (4)递推.9 (5)构造法.(poj3295)10 (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)11 二.图算法…

2爬虫基础了解

1.什么是爬虫爬虫&#xff0c;即网络爬虫&#xff0c;大家可以理解为在网络上爬行的一直蜘蛛&#xff0c;互联网就比作一张大网&#xff0c;而爬虫便是在这张网上爬来爬去的蜘蛛咯&#xff0c;如果它遇到资源&#xff0c;那么它就会抓取下来。想抓取什么&#xff1f;这个由你来…

js(function(){alert(‘’‘)})

function(){alert(sss)}是个匿名函数。没有名字。所以没有办法调用。在外面加个括号&#xff0c;就变成了一个值&#xff0c;值的内容是函数的引用。例如var a (function(){"nop"})a 就是对这个函数的引用。有了名字&#xff0c;之后可以调用&#xff0c;例如a()现在…

macbook 移动硬盘无法写入_如何升级MacBook笔记本的SSD硬盘-菜鸟折腾系列一

2010 年的时候买了 09 年末的 MACBOOK 小白&#xff0c;由于技术发展&#xff0c;软件越来越吃硬件内存&#xff0c;现在2G 内存别提基本的工作了&#xff0c;连开机都有困难&#xff0c;每次一点就一个风火轮&#xff0c;基本就是一块 13 寸的板砖了。。。众所周知 HDD 机械硬…