strcpy memcpy是面试高频点,很有必要搞清楚。
char* MyStrcpy(char* dest, const char* source) {
if (dest&&source) {
char* p = dest;
while ((*p++ = *source++) != '\0');
return dest;
}
return NULL;
}
这段代码,相信你也在其他地方看过,在没有内存重叠的时候,这也是正确答案。测试一下
int main() {
char q[10] = "2345";
char t[10];
Mystrcpy(t,q);
cout <<t;
getchar();
return 0;
}
不出意外,输出2345。
现在来看一下内存重叠会导致什么问题。
int main() {
char q[10] = "2345";
char *t;
t = q+2;
Mystrcpy(t,q);
cout <<t;
getchar();
return 0;
}
直接引发了异常
我调试了一下 发现问题出在while循环中,因为会发生数组越界,source会一直23