zoukankan      html  css  js  c++  java
  • 【C语言】模拟实现memmove函数(考虑内存重叠)

    //模拟实现memmove函数(考虑内存重叠)
    #include <stdio.h>
    #include <assert.h>
    #include <string.h>
    void * memmove(void * dst, const void * src, int count)
    {
    	void * ret = dst;
    	assert(dst);
    	assert(src);
    	if (dst <= src || (char *)dst >= ((char *)src + count))   //正常情况不发生重叠,从低到高
    	{
    		while (count--) 
    		{
    			*(char *)dst = *(char *)src;
    			dst = (char *)dst + 1;
    			src = (char *)src + 1;
    		}
    	}
    	else                                                      //发生重叠,从低到高
    	{
    		dst = (char *)dst + count - 1;
    		src = (char *)src + count - 1;
    		while (count--) 
    		{
    			*(char *)dst = *(char *)src;
    			dst = (char *)dst - 1;
    			src = (char *)src - 1;
    		}
    	}
    	return ret;
    }
    int main()
    {
    	char p[] = "hello!";
    	char *q = "world";
    	memmove(p, q,strlen(q)+1 );
    	printf("%s
    ", p);
    	return 0;
    }

  • 相关阅读:
    单例模式创建
    盛最多水的容器
    魔术索引
    钢条切割
    比较版本号
    矩阵中的路径
    机器人的运动范围
    计网基础问题
    Linux 下android环境的配置
    Fedora15下安装Android开发环境
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6930266.html
Copyright © 2011-2022 走看看