0
点赞
收藏
分享

微信扫一扫

memeset使用&模拟实现#yyds干货盘点#

memset - 内存设置函数

image.png

将缓冲区设置为指定的字符

以字节为单位进行初始化

int main()
{
    int arr[] = {1,2,3,4,5};

    memset(arr,0,20);   //初始化20个字节内容为0

    memset(arr,1,20);   //初始化20个字节内容为1
    return 0;
}

最初:
image.png

设置20个字节为0后->

image.png

设置20个字节为1后

image.png

注意点:以字节为单位进行初始化

模拟实现memset

*注意:由于不知道传过来的是什么类型->使用void类型接收,由于要设置的字节数恒大于0,所以用size_t接收,**

*由于只知道要设置的字节数,不知道是什么类型->所以使用char 一个字节一个字节的向后设置**

返回目标空间的起始地址

写法1:接收类型为整形

memset:将缓冲区设置为指定的字符所以要把整形强转为字符型,再把每一个字节设置为整形对应ascii的字符

void* my_memset(void* dest, int c, size_t count)
{
    assert(dest);
    void* tmp = dest;
    char set_c = (char)c;
    //内存设置,共设置count个字节
    while (count--)
    {
        *(char*)dest = set_c;
        dest = (char*)dest + 1;
    }
    return tmp;
}
int main()
{
    int arr[] = { 1,2,3,4,5 };

    my_memset(arr, 0, 20);  //初始化20个字节内容为0

    my_memset(arr, 1, 20);//初始化20个字节的内容为1
    return 0;
}

写法2:接收类型为字符

若直接设置字符,要设置的是其对应的值 1 而不是其对应的ascii码值。所以要减去‘0’

‘1’ - ‘0’ -> 1 所以接收的字符还要减上字符0

void* my_memset(void* dest, char c, size_t count)
{
    assert(dest);
    void* tmp = dest;
    //内存设置,共设置count个字节
    while (count--)
    {
        *(char*)dest = c - '0';
        dest = (char*)dest + 1;
    }
    return tmp;
}
int main()
{
    int arr[] = { 1,2,3,4,5 };

    my_memset(arr, '0', 20);    //初始化20个字节内容为0

    my_memset(arr, '1', 20);
    return 0;
}
举报

相关推荐

0 条评论