【C】库函数之 memmove

目录

1. Move block of memory

2. 源代码

3. 输出结果


1. Move block of memory

#include <string.h>
void * memmove ( void * destination, const void * source, size_t num );

Copies the values of num bytes from the location pointed by source to the memory block pointed by destination. Copying takes place as if an intermediate buffer were used, allowing the destination and  source to overlap.

The underlying type of the objects pointed by both the source and destination pointers are irrelevant for this function; The result is a binary copy of the data.

The function does not check for any terminating null character in source - it always copies exactly num bytes.

To avoid overflows, the size of the arrays pointed by both the destination and source parameters, shall be at least num bytes.

上述内容是 cplusplus 对 memmove 函数的介绍,

可以看出 memmove 函数从源 src 所指的内存地址的起始位置开始复制 count 个字节到目标 dest 所指的内存地址的起始位置中,允许目标字符串与源字符串重叠。

2. 源代码

#include <stdio.h>
#include <assert.h>

#define MAX_ARR 6

void *Memmove(void *dest, const void *src, size_t count) {                 
    assert((NULL != src) && (NULL != dest));                                

    void *ret = dest;                                                       

    if (dest < src) {
        while (count--)
#if 0
            // left -> right
            *(char *)ret = *(char *)src;
            ret = (char *)ret + 1;
            src = (const char *)src + 1;
#endif       
            *(char *)ret++ = *(char *)src++;
    } else { 
        while (count--)
            // right -> left
            *((char *)ret + count) = *((char *)src + count);
    }        
             
    return dest;
}

void print_int_arr(int arr[], int len) {
    int i = 0;
   
    for (; i < len; ++i)
        printf("%-4d", arr[i]);
   
    putchar('\n');
}
 
void test_int_arr() {                                                                                                                                   
    int i = 0;
    int a[MAX_ARR] = {0};
   
    for (i = 0; i < MAX_ARR; ++i)
        a[i] = i + 1;
   
    puts("call Memmove a array before:");
    print_int_arr(a, MAX_ARR);
    puts("call Memmove a array after:");
    Memmove(a + 2, a, sizeof(int) * 2);
    print_int_arr(a, MAX_ARR);
}  
   
int main(void) {  
    test_int_arr();
   
    return 0;
}

3. 输出结果

call Memmove a array before:
1   2   3   4   5   6
call Memmove a array after:
1   2   1   2   5   6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值