C语言字符函数及其实现2

前一篇:http://t.csdnimg.cn/Q7PXQ

memcpy——拷贝函数

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

  1. 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
  2. 这个函数在遇到 '\0' 的时候并不会停下来。
  3. 如果source和destination有任何的重叠,复制的结果都是未定义的。
void* my_memcpy(void* dst, const void* src, size_t n)
{
    assert(dst && src);//防止空指针
	void* ret = dst;
	while (n--)
	{
		*(char*)dst = *(char*)src;
        //1
		dst= (char*)dst+1;
		src= (char*)src+1;
        //2  也可以用下面这种
        ++(char*)dst;
		++(char*)src;
	}
	return ret;
}

memmove——可以实现自己拷贝自己

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

  1. 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
  2. 如果源空间和目标空间出现重叠,就得使用memmove函数处理
  3. num指的是要拷贝多少字节
void* my_memmove(void* dst, const void* src, size_t num)
{
	assert(dst && src);
	char* ret = dst;
	if (dst < src)//从前往后拷贝
	{
		while (num--)
		{
			*(char*)dst = *(char*)src;
			++(char*)dst;
			++(char*)src;
		}
	}
	else if (dst > src)
	{
		while (num--)//从后往前拷贝
		{
			*((char*)dst + num) = *((char*)src + num);
		}
	}
	return ret;
}

memcmp——比较大小

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

  1.  比较从ptr1和ptr2指针开始的num个字节
  2. 返回值如下:

int my_memcmp(const void* buf1, const void* buf2, size_t num)
{
	assert(buf1 && buf2);
	while (num--)
	{
		if (*(char*)buf1 == *(char*)buf2)
		{
			++(char*)buf1;
			++(char*)buf2;
		}
		return *(char*)buf1 - *(char*)buf2;
	}
}

 

相关推荐

  1. C语言------字符串函数2

    2024-04-23 10:08:03       50 阅读
  2. 深入C语言库:字符字符串函数模拟实现

    2024-04-23 10:08:03       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 10:08:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 10:08:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 10:08:03       87 阅读
  4. Python语言-面向对象

    2024-04-23 10:08:03       96 阅读

热门阅读

  1. ChatGPT如何助力科研创新,提升研究效率?

    2024-04-23 10:08:03       27 阅读
  2. GPT-SoVITS声音训练报错ZeroDivisionError: division by zero

    2024-04-23 10:08:03       32 阅读
  3. 分布式与微服务的区别

    2024-04-23 10:08:03       42 阅读
  4. python-读写文本数据

    2024-04-23 10:08:03       34 阅读
  5. 从零手写 tomcat

    2024-04-23 10:08:03       55 阅读
  6. STM32 ST-LINK

    2024-04-23 10:08:03       78 阅读
  7. QML与C++交互

    2024-04-23 10:08:03       38 阅读