1)如果整个程序,在进行字符拷贝时,这个拷贝字符串的完整性,不影响整个程 序的运行,可以让其截取一部分字符串,程序继续执行。那么我们就可以选择安全 函数:strncpy_s

2)如果在进行字符串拷贝时,源字符串不能完整拷贝到目的字符串,会影响整个 程序的运行,那我们就需要终了程序。这样的话,我们就选择安全函数:strcpy_s

所以在选择这两个安全函数时,就要根据需求来进行

以下是自己查资料和写程序验证的一点小总结,共享如下。如果有什么不同见解, 请指出!!

1.strcpy  有bufferOverFlow风险,会破坏内存。
  声明:char *strcpy(char* dest, const char *src);
  功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
  注:dest的空间必须要能够存储src的长度加上NULL字符

2.关于strcpy_s  不会有bufferOverFlow,但是当源串的长度大于目标缓冲区大小 时,会有提示性错误
  声明:strcpy_s(char* dest, size_t numElems, const char* src)
  功能:
  注:第二个参数表示目标缓冲区大小,大于或等于源串的长度+1(存放结束符 /0),strcpy_s必须完全拷贝源串,若只想拷贝一部分源串则应该用strncpy_s函数。
   当源串的长度大于目标缓冲区大小(也就是第二个指定的参数的值),不会发 生overflow,但是会有以下的提示错误:(Release和debug都会提示,只是debug 的提示会更加详细。下面是release的提示)
   問題が発生したため、exeを終了します。ご不便をおかけして申し訳ありません

3.strncpy  有bufferOverFlow风险,会破坏内存
  声明:char *strncpy(char *strDest,const char *strSource,size_t count);
  功能:将strSource的count个字符复制到strDest中,如果count小于或者等于 strSource的长度,
NULL字符就不会自动的加到已经复制的字符串后面;如果count大于strSource的长 度,会用NULL字符来填充到复制的字符串后面使其长度达到count
  可以参考msdn以下地址,里面有例子,自己可以参考运行。
  http://msdn.microsoft.com/zh-cn/library/xdsywd25(v=vs.90).aspx

4.strncpy_s  能截取一部分字符串,让程序继续运行
  声明:errno_t strncpy_s(char *strDest,size_t numberOfElements,const char *strSource,size_t count);
  功能:请参考:http://msdn.microsoft.com/zh-cn/library /5dae5d43(v=vs.90).aspx

关于strcpy的安全函数的选择的更多相关文章

  1. SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  2. 逆向 string.h 函数库 memset、strcpy、strcmp 函数

    memset 函数 函数原型:void *memset(void *str, int c, size_t n) 主要功能:复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符 ...

  3. sprintf、strcpy 及 memcpy 函数区别

    这些函数的区别在于 实现功能 以及 操作对象 不同.strcpy 函数操作的对象是 字符串 ,完成 从 源字符串 到 目的字符串 的 拷贝 功能. sprintf 函数操作的对象 不限于字符串 :虽然 ...

  4. Y+的查看及FLUENT壁面函数的选择

    y+的查看 其实,我们关心的应该是壁面y+值.那么我们看云图的话,是可以直接看到的,但是个人感觉,如果case大的话,也不是很方便.此外,你要是看云图的话,要用filled的方式,而且把node va ...

  5. strcpy, memcpy, memset函数

    一. strcpy函数 原型声明:char *strcpy(char* dest, const char *src);   头文件:#include <string.h> 和 #inclu ...

  6. Excel公式中双引号和单引号输入和显示以及函数的选择确认

    [Excel中显示双引号] 1.直接输入双引号“”或单引号“ 2.工式中显示双引号需输入“”“”“”(六个引号)或单引号需输入“”“”(四个引号) [Excel中快速确认已选择的函数] 1.用键盘的上 ...

  7. strcpy,memcpy,memset函数实现

    strcpy 实现,只能拷贝字符串 char* strcpy(char* des,const char* source) { char* r=des; assert((des != NULL) &am ...

  8. hash函数的选择

    哈稀函数按照定义可以实现一个伪随机数生成器(PRNG),从这个角度可以得到一个公认的结论:哈希函数之间性能的比较可以通过比较其在伪随机生成方面的比较来衡量. 一般来说,对任意一类的数据存在一个理论上完 ...

  9. strcpy与strcat函数原型

    1.strcpy函数原型 char *my_strcpy(char *dest,const char *src)    //const使在函数中不能修改*src其原先的值{ char *strDest ...

随机推荐

  1. Hadoop之集群搭建

    准备 需要准备多台主机(已经安装并且配置好hadoop和jdk) 需要配置ssh免密服务 下面我们开始进行配置,拿到已经准备好的主机,主机名分别为: centos101 centos102 cento ...

  2. Scala学习(二)——高级特性

    apply() 方法 apply方法是Scala提供的一个语法糖 类名+括号,调用对象的apply方法 对象名+括号,调用类的apply方法 对apply方法的简单测试:(其中,带 new -- cl ...

  3. mysql索引失效问题

    1.两表关联使用的条件字段中字段的长度是否是一致的 2.两表关联使用的条件字段中字段的编码是否是一致的

  4. vue问题二:vue打包时产生的问题

    vue项目打包问题:vue中默认的config/index.js的配置的详细理解: 参考文档:https://blog.csdn.net/qq_34611721/article/details/809 ...

  5. LeetCode 409——最长回文串

    1. 题目 2. 解答 我们先来看一看回文子串的规律,如果回文子串的长度为偶数,那么其中所有的每个元素都出现了偶数次:如果回文子串的长度为奇数,那么有一个元素出现了奇数次而其余每个元素都出现了偶数次. ...

  6. ArcGISDynamicMapServiceLayer 和 ArcGISTiledMapServiceLayer 区别

    ArcGISDynamicMapServiceLayer(动态地图服务)通常用于实时显示经常变化的数据,支持控制单个图层可见性,可动态投影.但缺点是显示效果较差,整个服务出图较慢:ArcGISTile ...

  7. 阶段3 2.Spring_10.Spring中事务控制_2 作业-基于注解的AOP实现事务控制及问题分析_上

    创建maven的新项目 先复制坐标的依赖. 再把代码复制进来 先改造ioc的部分 复制上面一行代码.到下面 改成context 这里也是复制的上面两行代码.到下面改成context关键字 配置扫描的包 ...

  8. PHP结合Ueditor并修改图片上传路径 微信小程序 拼接域名显示图片

    前言 在使用UEditor编辑器时,一般我们都是需要修改默认的图片上传路径的,下面是我整理好的修改位置和方法供大家参考. 操作 Ueditor PHP版本本身自带了一套上传程序,我们可以在此基础中,找 ...

  9. JSON中文处理类实例

    $array = array( 'Name'=>'络恩', 'Age'=>24); $post=my_json_encode($array); // 这个函数是判断版本,如果是搞版本的则直 ...

  10. js实现动画(移动方块)

    1.使方块移动 源码 : <script type="text/javascript">    var div = document.createElement('di ...