小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

基于visual Studio2013解决面试题之0902内存拷贝




题目



解决代码及点评

/*
    用 C 语言实现函数 void * memmove(void *dest,const void *src,size_t n)
    memmove 函数的功能是拷贝 src 所指的内存内容前 n 个字节到 dest 所指的地址上。 

	简单循环拷贝即可,但是这道题,要深究起来很多问题,比如内存区域是重叠的,有可能左边重叠也可能右边重叠
		
*/

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

void* Mymommove( void *dest, const void *src, size_t nCount )
{
    if (NULL == dest || src == NULL)
    {
        return NULL;
    }
    char *pszDest = (char *)dest;
    const char *pszSrc = (char *)src;
    
	// pszDest开始地址,处于pszSrc中,那么不能从头开始拷贝,而是从尾部开始拷贝
    if (pszDest > pszSrc && pszDest < pszSrc + nCount)
    {
        for (int i = nCount - 1; i >= 0; i--)
        {
            pszDest[i] = pszSrc[i];
        }
    }
    else // 其他情况是从开始部位开始拷贝
    {
        for (size_t i = 0; i < nCount; i++)
        {
            pszDest[i] = pszSrc[i];
        }
    }
    return dest;
}

int main()
{
    char szBuf[] = "abcdefghijklmn";
    char szBuf2[100] = {0};
    char *p = szBuf + 2;
    Mymommove(szBuf, p, 4);
    printf("%s\n", szBuf);
    system("pause");
    return 0;
}

代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果









posted on 2013-12-20 01:17  牛栏山1  阅读(93)  评论(0编辑  收藏  举报

导航