今天去面试,碰到了天杀的strcpy
,然后面试官让我把其祖宗十八代交代下,傻眼了,接下来就好好总结一哈,防患于未然~~~~
内存越界
当要拷贝的源字符串大于目标串的长度时,由于无法根据指针判断其所指定的长度,所以数组内存边界是不知道的,会导致潜在的内存越界问题,这个会死人的
效率低
当目标数组的长度大于源字符串的长度时会在其末尾一直添加结束符\0
,一直到数组满为止
\0丢失
当源字符串的长度刚好等于目标数组长度时,会使得最后目标字符串结束符\0
丢失
内存覆盖问题
当源字符串和目标串内存一样(重叠)时就傻眼了
最后面试官肯定让你自己手写一个strcpy
,以下是代码
char* strcpy(char *strDest, const char* strSrc)
{
char *tp=NULL;
//这个判断很重要,面试官很看重
if(strDest == NULL || strSrc == NULL)
{
return NULL;
}
tp = strDest;
while((*strDest++ = *strSrc ++) != '\0');
return tp;
}
2019年10月31日下午16:45
by 打不死的小强