用C语言实现函数void * memmove(void *dest, const void *src, size_t n)。

本文介绍如何使用C语言实现memmove函数,用于拷贝src所指内存内容到dest所指地址,特别关注内存重叠情况的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于可以把任何类型的指针赋给void类型的指针
这个函数主要是实现各种数据类型的拷贝。

 

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

考虑到内存可能重叠的情况,要在函数中避免有以下方式

void *memmove(void * dest, void *src, size_t n)  
{  
    void *tmp;  
    int p;  
    if ((tmp=malloc(n))==NULL)  
        return NULL;  
    for(p=0;p<n;p++)  
        *((char *)tmp+p)=*((char *)src+p);  
    for(p=0;p<n;p++)  
        *((char *)dest+p)=*((char *)tmp+p);  
    return dest;  
} 

#include "stdio.h"   
  
  
void* memmove(void *dest, const void* src, size_t n)    
{    
    if(dest == NULL || src == NULL)    
        return NULL;    
    char* p =(char*) dest;    
    char* q =(char*) src;    
    while(n--)    
    {    
        *p++ = *q++;    
    }    
    return dest;    
}    
int main()    
{    
    char* p = "hello,world";    
    char dest[6] = {0};    
    char *q = (char*)memmove(dest,p,5);    
    printf("%s\n",dest);    
    printf("%s\n",q);    
    return 0;    
}    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值