memset, memcpy and memmove

作者: freelamb | 来源:发表于2017-02-22 17:38 被阅读13次

memset

函数原型

void* memset( void* dest, int ch, size_t size);

头文件
include <string.h>
功能
将dest所指的内存区域的前size个字节的值全部设置为ch指定的ASCII值,然后返回指向dest的指针。
返回值
返回指向dest的指针。注意返回的指针类型是void,使用时一般要进行强制类型转换。
实现

void* memset( void* dest, int ch, size_t size)
{
    if (dest == NULL) {
        return NULL;
    }

    unsigned char* temp = (unsigned char *)dest;
    const unsigned char c = (unsigned char)ch;

    while (size--) {
        *temp++ = c;
    }

    return dest;
}

memcpy

函数原型

void* memcpy(void* dest, const void* src, size_t size);

头文件
include <string.h>
功能
memcpy()用来复制内存,将src所指的内存内容的前size个字节复制到dest所指的内存地址上。memcpy()并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。与 strcpy()不同的是,memcpy()会完整的复制size个字节,不会因为遇到"\0"而结束。
返回值
返回指向dest的指针。注意返回的指针类型是void,使用时一般要进行强制类型转换。
实现

void* memcpy(void* dest, void* src, size_t size)
{
    if (dest == NULL || src == NULL) {
        return NULL;
    }

    unsigned char* temp_dest = (unsigned char *)dest;
    unsigned char* temp_src = (unsigned char *)src;

    while (size--) {
        *(temp_dest++) = *(temp_src++);
    }

    return dest;
}

memmove

函数原型

void* memmove(void* dest, const void* src, size_t size);

头文件
include <string.h>
功能
memmove()与memcpy()类似都是用来复制src所指的内存内容前size个字节到dest所指的地址上。不同的是,memmove()更为灵活,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理,不过执行效率上会比使用memcpy()略慢些。
返回值
返回指向dest的指针。注意返回的指针类型是void,使用时一般要进行强制类型转换。
实现

void* memmove(void* dest, void* src, size_t size)
{
    if (dest == NULL || src == NULL) {
        return NULL;
    }

    unsigned char* temp_dest = (unsigned char*)dest;
    unsigned char* temp_src = (unsigned char*)src;
    size_t index = 0;

    if ((temp_dest >= temp_src) || (temp_src + size < temp_dest)) {
        for (index = 0; index < size; index++) {
            temp_dest[index] = temp_src[index];
        }
    } else {
        for (index = size; index > 0; index--) {
            temp_dest[index - 1] = temp_src[index - 1];
        }
    }

    return dest;
}

相关文章

  • memset, memcpy and memmove

    memset 函数原型 头文件include 功能将dest所指的内存区域的前size个字节的值全部设置为ch指...

  • memset,memcpy,memmove函数

    这三个函数分别实现内存设置,内存拷贝和内存移动 需要包含头文件#include 1.memset函数:内存的值重新...

  • memmove 和 memcpy 的区别

    memmove和memcpy都是拷贝,区别是memmove会判断方向,如果有重叠的区域那么memcpy就会有问题 ...

  • memcpy与memmove的区别

    memcpy和memmove都是C语言的库函数,相比于strcpy和strncpy只能拷贝字符串数组,memcpy...

  • memcpy memmove 函数

    memcpy函数 函数原型 功能:由src指向地址为起始地址的连续 size个字节的数据复制到以dest指向地址为...

  • memmove与memcpy

    我们知道,分类的方法列表是通过memmove和memcpy加到类的方法列表的前面,而同名的分类方法根据文件的编译顺...

  • memmove和memcpy

    内存移动void *memmove(void *str1, const void *str2, size_t n)...

  • 常用

    void *memset(void *s,int c,size_t n) 例: memcpy ...

  • strcpy、memset、memcpy

    1.strcpy的用法 strcpy的作用是拷贝字符串,当它遇到'\0'时结束拷贝,原型为:extern char...

  • 总结:头文件cstring函数的用法(original)

    一.复制类(cpy) (1)memcpy 函数原型: 用法:可与用于转移数据 (2)memmove 函数原型: 基...

网友评论

    本文标题:memset, memcpy and memmove

    本文链接:https://www.haomeiwen.com/subject/isisvttx.html