Memcpy和strcpy区别
一道看似简单的面试题,却容易搞混淆。C/C++水真的很深。
题目是让你实现一个Memcpy,我一开始以为是strcpy,后者比较容易实现,memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束,Memcpy的长度,必须你自己设定,strcpy的长度可以通过strlen()计算出来,所以memcpy需要第三个参数count.
memcpy()的实现
难点:1.指针类型的变换
2.要防止内存拷贝时的相互覆盖
1 void* memcpy(void* dest, const void* source, int count){ 2 char* dst = static_cast<char*> dest; 3 const char* src = static_cast<char*>source; 4 if(dst > src && dst < src + count){ 5 for(int i = count - 1; i >=0; i--) 6 dst[i] = src[i]; 7 }else{ 8 for(int i = 0; i < count; i++) 9 dst[i] = src[i]; 10 } 11 return dst; 12 }
而后者strcpy实现就比较简单
char* strcpy(char *dst, const char* src){ while((*dst++ = *src++) != '\0') ; return dst; }

浙公网安备 33010602011771号