zoukankan      html  css  js  c++  java
  • 关于strcpy的安全函数的选择

    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

  • 相关阅读:
    汇编语言(王爽) 实验九
    汇编语言(王爽)实验十
    leetcode longest common prefix(easy) /java
    leetcode container-with-most-water(medium) /java
    jdbc 驱动设置
    天上的星星都洒在我身上(mysql重装失败指南)
    leetcode palindrome number(easy) /java
    异常处理
    递归函数
    序列化模块
  • 原文地址:https://www.cnblogs.com/honglihua8688/p/3495277.html
Copyright © 2011-2022 走看看