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;
}        

 

 

posted @ 2012-09-08 00:03  桥边红药  Views(206)  Comments(0)    收藏  举报