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. 【python】windows更改jupyter notebook(ipython)的默认打开工作路径

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  2. IP处理模块IPy

    #安装IPy模块#pip install IPy #from IPy import IPip_s = input('please input an IP or net-range:')#192.168 ...

  3. 7. 进行图片的数据补全和增强(随机亮度,随机饱和度,随机翻转) Image.open(进行图片的读入) 2.ImageEnhance.Brightness(亮度变化) 3.ImageEnhance.Contrast(饱和度变化) 4.enhance_image.transpose(图片随机翻转) 5.enhance_image.save(进行图片保存)

    1.Image.open(image_path)  进行图片的打开 参数说明:image_path 表示图片的路径 2. ImageEnhance.Brightness(image)  # 进行图片的 ...

  4. 8.6培训 D1

    今天是赵和旭老师讲课(也是 zhx) 动态规划 利用最优化原理把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解(有点像分治?) 更具体的,假设我们可以计算出小问题的最优解,那么我们凭 ...

  5. jsp死循环

    查看多重循环的  i    或者    j    是否写错

  6. PRISM 4 - RegisterViewWithRegion & Custom Export Attributes

    5down votefavorite   I am using Prism 4 with MEF Extensions and the MVVM pattern. During initializat ...

  7. 关于Toad的Cannot load OCI DLL问题

    昨天重新安装了新版本的JDK,突然发现Toad连接的时候报Cannot load OCI DLL....问题,网上查找了多种方法均不见效. 后调整系统环境变量配置,还原了之前安装的JDK版本,问题修复 ...

  8. Activity启动模式分类(一)

    standerd 默认模式,每次启动Activity都会创建一个新的Activity实例. 比如:现在有个A Activity,我们在A上面启动B,再然后在B上面启动A,其过程如图所示: single ...

  9. java:Springmvc框架2(Ajax,Json,Interceptor,Upload,Exception)

    1.springmvcAjax: springmvc.xml: <?xml version="1.0" encoding="UTF-8"?> < ...

  10. ibatis使用iterate实现批量插入insert正确写法

    由于想批量入库提升效率,最近实现了ibatis的批量插入,结果一直报错 :StringIndexOutOfBoundsException ,原来是value中的格式不正确. 本人邮箱:techqu@1 ...