zoukankan      html  css  js  c++  java
  • strcpy函数内存分析

    void strcpy(char* strDest, char* strSrc)

    {

      while((*strDest++ = *strSrc++) != '');

    }

    看上面这段代码,只有一条语句,当然把代码放在这里不是为了展示编程技巧,而是想要说一下这段简短的代码中会出现的内存问题。(先谢组长一波)

    1.指针为空

      这是最典型的也是最容易想到的,strDest和strSrc任意一个指针为空都会导致内存报错

    2.指针指向内存块不够

      这也是最为常见的一个错误,如果strDest指向的内存空间不够用来存放目标字符串,根据c指针的灵活性并不会检查这一错误,而会继续复制下去,其后面超出的内存块上的原有内容被覆盖,严重的话如果被覆盖的内容是被程序占用,则会导致程序异常终止。

    3.指针距离不够存放字符串

      这是今天组长告诉我的,这里的隐藏问题就是,如果strSrc指向的字符串很长,而strDest要存储这个字符串就必然会从当前地址开始一个一个的复制strSrc中的字符,如果strDest和strSrc地址间隔小于要copy的字符串长度,则在复制的时候会造成内存重叠。

    解决办法:计算两指针距离并与目标字符串长度进行比较,若小于则报错。

  • 相关阅读:
    6174问题
    阶乘的精确值
    小学生算术
    Primer回顾 数组和指针
    Primer回顾 标准库类型
    绪论
    字符串的存储
    条款39:明智而审慎的使用private继承
    条款34:区分接口继承和实现继承
    条款33:避免遮掩继承而来的名称
  • 原文地址:https://www.cnblogs.com/GuoYuying/p/11455936.html
Copyright © 2011-2022 走看看