strcpy和memcpy都是标准C库函数,它们有下面的特点。
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
void *memcpy( void *dest, const void *src, size_t count );
#include <iostream>
#include <string.h>
#include <cassert>
using namespace std;
char* strcpy(char *dst, const char *src) {
assert(src != NULL);
assert(dst != NULL);
char *ret = dst;
while((*dst++ = *src++) != '\0') ;
return ret;
}
void* memcpy(void *dst, const void *src, size_t len) {
assert(src != NULL);
assert(dst != NULL);
void *ret = dst;
int i = len;
if(src < dst)
{
char *csrc = (char *)src;
char *cdst = (char *)dst;
while(i--)
{
*cdst++ = *csrc++;
}
}
else
{
char *csrc = (char *)src + len - 1;
char *cdst = (char *)dst + len - 1;
while(i--)
{
*cdst-- = *csrc--;
}
}
return ret;
}
int main() {
char *src = "hello world";
char *dst = new char[0];
cout << strcpy(dst, src) << endl;
void *memsrc = (void *)"hello";
char memdst[6];
memdst[5] = '\0';
cout << (char *)memcpy(memdst, memsrc, 5) << endl;
return 0;
}