strcpy、strncpy、memcpy 区别与实现

发布时间 2023-10-23 16:47:51作者: 王清河

strcpy、strncpy、memcpy 的区别

strcpy

  1. 描述
  • 将一个字符串复制到另一个字符串中
  1. 实现
char *myStrcpy(char* dest, const char* src){
    if ((NULL == dest) || (NULL == src)){
        return NULL;
    }

    char *strDest = dest;
    const char *strSrc = src;
    while ((*dest++ = *strSrc++) != '\0');
    return strDest;    
}

strncpy

  1. 描述
  • 将一个字符串的前 count 字节复制到另一个字符串中
  1. 实现
char* strncpy(char* dest, const char* source, size_t count){
    if (NULL == dest || NULL == source || count <= 0){
        return NULL;
    }

    char *start = dest;
    while (count && (*dest++ = *source++)){
        count--;
    }

    if (count){
        while(--count){
            *dest ++ = '\0';
        }
    }

    return (start);
}

memcpy

  1. 描述
  • 将一块内存中的内容复制到另一块内存中
  1. 实现
void *myMemcpy(void *dest, const void *src, size_t size){
    if(NULL == dest || NULL == src){
        return NULL;
    }

    char *pDest = NULL;
    char *pSrc = NULL;

    if ((src < dest) && ((char*)src + size > (char*)dest)){
        pDest = (char *)dest + size - 1;
        pSrc = (char *)src + size - 1;
        while(size--){
            *pDest-- = *pSrc--;
        }
    }
    else{
        pSrc = (char *)src;
        pDest = (char *)dest;
        while (size--)
        {
            *pDest++ = *pSrc;
        }
    }
    
    return dest;
}

区别

  • strcpy 遇到空字符串复制操作停止
  • strncpy 复制指定数量的字符
  • memcpy 复制指定内存字节