1.strcpy函数
函数原型:
char *strcpy(char *dest, const char *src)
{
char *tmp = dest;
while((*dest++ = *src++) != '\0');
return tmp;
}
功能:实现字符串的拷贝
参数:@dest 保存拷贝后的字符串(目的串)
@src 要拷贝的字符串(原串)
返回值:成功返回目的串的首地址
缺点:没有检查传入的参数是否为空
改进后的strcpy函数:
char *strcpy(char *dst, const char *src)
{
if((dst==NULL) || (src==NULL))
return NULL;
char *tmp = dst;
while ((*dst++ = *src++) != '\0');
return tmp;
}
2.memcpy函数
函数原型:
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while(count--)
*tmp++ = *s++;
return dest;
}
功能:实现内存的拷贝
参数:@dest 保存拷贝后的内存(目的内存)
@src 要拷贝的内存(原内存)
@count 要拷贝内存的字节数
返回值:成功返回拷贝后的内存首地址
缺点:没有考虑内存重叠的问题
改进的memcpy函数:
void *memory(void *dst,const void *src,size_t count)
{
const char *psrc = static_cast<const char*>(src);
char *pdst = static_cast<char*>(dst);
if(psrc==NULL || pdst==NULL)
return NULL;
if(pdst>psrc && pdst<(psrc+count))
{
for(size_t i=count-1; i!=-1; i--) //从后往前拷贝
pdst[i] = psrc[i];
}
else
{
for(size_t i=0; i<count; ++i) //从前往后拷贝
pdst[i] = psrc[i];
}
return dst;
}
3.strcpy函数和memcpy函数的区别
(1)strcpy遇到'\0'会结束拷贝,而memcpy函数不会结束,并且一定会复制完count个字节
(2)memcpy要考虑内存重叠的问题,并且拷贝的时候存在内存覆盖的问题