memcpy和strcpy函数实现

1.memcpy函数

函数原型:void *memcpy(void *dest, const void *src, size_t n);
思路:先将void* 转化为char*,然后按位赋值。

void* memcpy(void* dest,const void* src,size_t len)
{
    char* dest_char = dest;
    const char* src_char = src;
    while(len-->0)
    {
        *dest_char = *src_char;
        dest_char++;
        src_char++;
    }
    return dest;
}

2. strcpy函数

函数原型:char* strcpy(char* dest, const char* src)

char* strcpy(char* dest, const char* src)
{
    if(dest == NULL || src == NULL)
    {
        return NULL;
    }

    char* p = dest;
    while(*src != '\0')
    {
        *p = *src;
        p++;
        src++;
    }

    return dest;
}

strcpy函数拷贝结束条件是判断最后一位是否是’\0’。
所以下面的代码:

char s1[3];
char s2[3];
for(int i=0; i<3; ++i)
{
    s1[i] = ‘a’;
}

strcpy(s2, s1);
printf("%s\n", s2);

无法对s2正确赋值,打印出来的是aaa)ÿ,三个a赋值成功,但是最后一位是乱码,这样赋值是有问题的。

你可能感兴趣的:(C++学习)