概述
模拟实现memset,memcpy,memmove函数
memset
功能是将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。memset的作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
模拟实现代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
void* my_memset(void* buf, int set, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
*((char*)buf + i) = set;
}
return buf;
}
int main()
{
char buf[5];
int i = 0;
my_memset(buf, 0, 5);
for (i = 0; i < 5; i++)
{
printf("%sn", buf[i]);
}
system("pause");
return 0;
}
运行结果如下:
memcpy
memcpy的函数原型是void *memcpy(void *dest, const void *src,size_t n),其功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
模拟代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
void* my_memcpy(void* dest, const void* src, int count)
{
assert(dest != NULL);
assert(src != NULL);
char *pdest = (char*)dest;
char *psrc = (char*)src;
int i = 0;
for (i = 0; i < count; i++)
{
*pdest++ = *psrc++;
}
return dest;
}
int main()
{
char buf[] = "i love world";
char arr[20];
int i = 0;
my_memcpy(arr, buf, 13);
printf("%sn", arr);
system("pause");
return 0;
}
运行结果如下:
memmove
用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。由src所指内存区域复制count个字节到dest所指内存区域。
因此在模拟实现的时候,我们要考虑从前向后拷贝还是从后向前拷贝,举个简单的例子具体分析:
模拟实现代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
void* my_memmove(void* dest, const void* src, int count)
{
assert(dest != NULL);
assert(src != NULL);
char *pdest = (char*)dest;
char *psrc = (char*)src;
int i = 0;
if (dest < src)
{
for (i = 0; i < count; i++)
{
*pdest++ = *psrc++;
}
}
else
{
while (count--)
{
*(pdest+count) = *(psrc+count);
}
}
return dest;
}
int main()
{
int buf[] = { 2, 3, 4, 5, };
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int i = 0;
my_memmove(arr, buf, 16); //16个字节相当于4个整型
for (i = 0; i < 10; i++)
{
printf("%d", arr[i]);
}
printf("n");
system("pause");
return 0;
}
运行结果如下:
最后
以上就是沉默天空为你收集整理的模拟实现memset,memcpy,memmove函数的全部内容,希望文章能够帮你解决模拟实现memset,memcpy,memmove函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复