自己实现memcpy,strcpy与strncpy

内存拷贝函数

//实现拷贝不重叠的内存块
void* memcpy1(void* dst,const void* src,size_t count)    
{   
    char* pTo = (char*)dst;
    char* pFrom = (char*)src;
    assert(dst != NULL && src != NULL);
    assert(pTo >= pFrom+count || pTo <= pFrom-count);//防止内存重叠(over    lap)    
    while(count-- > 0)
    {   
        *pTo++ = *pFrom++;
    }   
    return dst;
}
#include<stdio.h>

char* mystrcat(char* str1,char* str2)//连接
{
    char* p=str1;
    while (*str1 !='')
    {
        str1++;
    }
    //  while(*str1++);
    while (*str2 != '')
    {
        *str1=*str2;
        str1++;
        str2++;
    }
    //  while (*str1++ = *str2++);
    *str1='';
    return p;
}

char* mystrcpy(char* str1,char* str2)
{
    char*p = str1;
    while (*str1++ = *str2++);
    return p;
}

char* mystrncpy(char* str1,char* str2,int n)
{
    char* p=str1;
    for (;*str2!=''&&n>0;n--)
    {
        *str1 = *str2;
        str1++;
        str2++;
    }
    *str1='';
    return p;
}

int mystrcmp(char* str1,char* str2)
{
    while(1)
    {
        if(*str1==*str2 && *str1 !='')
        {
            str1++;
            str2++;
        }
        else if (*str1==*str2 && *str1=='')
            return 0;
        else if(*str1>*str2)
            return 1;
        else
            return -1;
    }
}

 字符串拷贝

#include <iostream>
#include <string.h>

using namespace std;

char* Mystrcpy(char* dst,const char* src)
{
    if(dst == NULL || src == NULL)
        return NULL;
    int i = 0;
    for(i = 0;src[i] != '';i++)
    {
        dst[i] = src[i];
    }
    dst[i] = '';
    return dst;
}
char* Mystrncpy(char *dest, const char *src, size_t n)
{
    if(dest == NULL || src == NULL)
        return NULL;
    int i;
    for (i = 0; i < n && src[i] != ''; i++)
      dest[i] = src[i];
    for ( ; i < n; i++)
        dest[i] = '';

    return dest;
}

int main()
{
    char dst[10];
    char dst1[4];
    char src[] = "hello";
    Mystrcpy(dst,src);
    cout << dst << endl;
    Mystrncpy(dst1,src,3);
    cout << dst1 << endl;
    return 0;
}
//结果:
/*
hello
hel
*/
原文地址:https://www.cnblogs.com/nanqiang/p/9955160.html