memeset使用&模拟实现
【摘要】 「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战」 memset - 内存设置函数将缓冲区设置为指定的字符以字节为单位进行初始化int main(){ int arr[] = {1,2,3,4,5}; memset(arr,0,20); //初始化20个字节内容为0 memset(arr,1,20); //初始化20个字节内容为...
「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战」
memset - 内存设置函数
将缓冲区设置为指定的字符
以字节为单位进行初始化
int main()
{
int arr[] = {1,2,3,4,5};
memset(arr,0,20); //初始化20个字节内容为0
memset(arr,1,20); //初始化20个字节内容为1
return 0;
}
最初:
设置20个字节为0后->
设置20个字节为1后
注意点:以字节为单位进行初始化
模拟实现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;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)