字符函数和内存函数

一.字符函数分为字符分类函数和字符转换函数。

字符分类函数:

字符转换函数:

二.内存函数

1. memcpy

内存拷贝,单个字节的拷贝,重叠空间拷贝可能出错。类似strcpy函数

void * memcpy ( void * destination, const void * source, size_t num );
 

函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。这个函数在遇到 '\0' 的时候并不会停下来。

如果source和destination有任何的重叠,复制的结果都是未定义的。

2.memmove

内存移动,将source源头内存移动到destination目标内存。

和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。如果源空间和目标空间出现重叠,就得使用memmove函数处理。

void * memcpy ( void * destination, const void * source, size_t num );
3.memcmp

比较从ptr1和ptr2指针开始的num个字。

int memcmp ( const void * ptr1,const void * ptr2,size_t num );

返回值>0,ptr1>ptr2;

==0,ptr1==ptr2;

<0,ptr1<ptr2;

三.内存函数的实现

1.memcpy

函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。表明,是以每个字节单位去拷贝,所以将destination和source强转成char类型指针,解引用访问一个字节,逐渐向后拷贝。第一行用assert防止destination和source为空指针。用void*指针保存destination起始位置。

void *user_memcpy(void *dest, void *src, size_t num)
{
    assert(dest && src);
    void *ret = dest;
    for (int i = 0; i < num; i++)
    {
        *((char *)dest) = *((char *)src);
        dest = (char *)dest + 1;
        src = (char *)src + 1;
    }
    return ret;
}

destination,source向后移动不推荐用++,因为强转后的destination和source是不能被赋值的变量。

2.memmove

将source源头内存移动到destination目标内存。源内存块和目标内存块是可以重叠的。

重叠部分既要拷贝出去,又要被拷贝修改。所以保证已经拷贝的重叠内存要比还未拷贝的重叠内存先被修改,而且重叠部分要最先开始拷贝。

因此分为从前往后拷贝和从前往后拷贝。依旧以字节为单位。

void *user_memmove(void *dest, void *src, size_t num)
{
    assert(dest && src);
    void *result = dest;
    if (dest < src)
    {
        for (int i = 0; i < num; i++)
        {
            *((char *)dest + i) = *((char *)src + i);
        }
    }
    else
    {
        for (int i = num - 1; i >= 0; i--)
        {
            *((char *)dest + i) = *((char *)src + i);
        }
    }
    return result;
}

以上就是主要内容。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨落寒山意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值