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的字符串长度,则在复制的时候会造成内存重叠。

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

  • 相关阅读:
    Codeforces Round #717 (Div. 2)
    Codeforces Round #716 (Div. 2)
    atCoder Regular Contest 117
    Codeforces Round #715 (Div. 2)
    牛客挑战赛49
    从零开始搭建webpack应用
    扫盲:npm
    MYSQL安装
    Int和integer区别
    关于JDK配置以及DOS窗口执行指令
  • 原文地址:https://www.cnblogs.com/GuoYuying/p/11455936.html
Copyright © 2011-2022 走看看