strcpy函数内存分析

void strcpy(char* strDest, char* strSrc)

{

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

}

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

1.指针为空

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

2.指针指向内存块不够

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

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

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

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

posted @ 2019-09-03 21:51  _程序兔  阅读(484)  评论(0编辑  收藏  举报