strcpy
char * strcpy ( char * destination, const char * source );
返回值:destination
memcpy
void * memcpy ( void * destination, const void * source, size_t num );
c實現(考慮到內存重疊的情況):
void* my_memcpy(void* dst, const void* src, size_t len) {
if(dst==NULL || src==NULL) return NULL;
if(src<dst && dst<src+len) { //重疊,從後往前複製
char* pdst = (char*)dst + len-1;
char* psrc = (char*)src + len-1;
while(len--) {
*pdst = *psrc;
pdst--;
psrc--;
}
}
else { //從前往後複製
char* pdst = (char*)dst;
char* psrc = (char*)src;
while(len--) {
*pdst = *psrc;
pdst++;
psrc++;
}
}
return dst;
}
注:可以用任意類型的指針對 void* 指針進行初始化,但把 void* 指針賦給其它類型的話,要強制類型轉換,就像上面一樣。