c、c++字符串学习(0)

常见字符串操作的内部实现:(默认传入的地址不是NULL,否则直接return NULL)

名称:memset
功能:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

void* memset(void* s, int c, size_t  count)
{
	char* xs = (char*)s;//创建临时指针变量指向开辟内存空间首地址
	while(count--)//循环count次完成操作
	{
	   *xs++ = c;//将内存值赋值为c,并实现++
	}
        return s;//完成操作后返回开辟的内存首地址
}

名称:memcpy
功能:函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域)
void* memcpy(void* dest, void* src, size_t count)
{
   char* tmp = (char*)dest; //创建临时指针变量指向dest内存首地址
   const char* src1 = (char*)src;//创建const指针变量指向src内存首地址(const防止指针操作改变src中的数据)
   while(count--)
   {
      *tmp++ = *src1++;
   }
   return dest;
}

名称:memmove(区别memcpy是dest和src可以重叠)
功能:由src所指内存区域复制count个字节到dest所指内存区域。
src和dest所指内存区域可以重叠,但复制后dest内容会被更改。函数返回指向dest的指针

需要注意的操作:

//(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝

//(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝

//(3)当源内存的首地址小于目标内存的首地址时,实行反向拷贝


void* memmove(void* dest, void* src, size_t count)
{
    if(dest == src)
    {
        return dest;
    }
    
    char* tmp;
    const char* s;
    if(dest <= src)
    {
        tmp = (char*)dest;
        s = (const char*)src;
        while(count--)
        {
            *tmp++ = *s++;
        }
    }
    else
    {
        tmp = (char*)dest;
        tmp += count;
        s = (const char*)src;
        s += count;
        while(count--)
        {
            *--tmp = *--s;
        }
//或者
        tmp = (char*)dest;
        tmp += count -1;
        s = (const char*)src;
        s += count -1;
        while(count--)
        {
            *tmp-- = *s--;
        }
 } return dest;
}


名称:memcmp
功能:memcmp是比较内存区域buf1和buf2的前count个字节。该函数是按字节比较的。
int memcmp(void* buff0, void* buff1, size_t count)
{
    int ret = 0;
    const unsigned char* tmp0 = (const unsigned char*)buff0;
    const unsigned char* tmp1 = (const unsigned char*)buff1;
    for(;count > 0; ++tmp0, ++tmp1, count--)
    {
        ret = *tmp0 - *tmp1;
        if(ret != 0)
        {
            break;
        }
    }
    
    return ret;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值