strcpy和memcpy的实现
函数strcpy
字符串拷贝函数,原型:
char *strcpy(char* dest, const char *src);
从src逐字节拷贝到dest,直到遇到'\0'结束,因为没有指定长度,可能会导致拷贝越界,造成缓冲区溢出漏洞,安全版本是strncpy函数。
自己写strcpy:
char * strcpy(char * strDest,const char * strSrc)
{
if ((strDest==NULL)||strSrc==NULL))
return NULL;
char * strDestCopy=strDest;
while ((*strDest++=*strSrc++)!='\0');
*strDest = '\0';
return strDestCopy;
}
函数memcpy
从s2指向的对象中复制n个字符到s1指向的对象中。如果复制发生在两个重叠的对象中,则这种行为未定义。
void *memcpy(void *s1, const void *s2, size_t n);
函数memcpy返回s1的值。
自己写memcpy:
void * memcpy(void *dst, void *src, int num){
if (dst == NULL || src == NULL || num <= 0)
return NULL;
char *pdst = (char *)dst;
char *psrc = (char *)src;
if (psrc < pdst&&pdst < psrc + num){
pdst = pdst + num - 1;
psrc = psrc + num - 1;
while (num--){
*pdst = *psrc;
pdst--;
psrc--;
}
}
else{
while (num--){
*pdst = *psrc;
pdst++;
psrc++;
}
}
return dst;
}