memcpy函数

C/C++ 2014年11月10日 , ,

本文提供了C语言头文件<string.h>中函数memcpy的一种实现方法及解释。测试系统为CentOS 6.5,编译器为GCC 4.4.7。http://furzoom.com/function-memcpy/

memcpy函数说明

void *memcpy(void *s1, const void *s2, size_t n);

函数memcpys2指向的对象中复制n个字符到s1指向的对象中。如果s1s2两个对象重叠,则这种行为未定义

函数返回指向s1的指针。

memcpy函数实现要点

函数memcpy实现还是比较简单的。需要注意的是不能对void类型指针变量指向的内存写入数据,结合如下代码,即不能使用如下表达式*s1 = *s2

memcpy实现

// memcpy function
// By furzoom @ Nov.5, 2014
// From http://furzoom.com/
#include  // for NULL

void *(memcpy)(void *s1, const void *s2, size_t n)
{
	const unsigned char *pu2;
	unsigned char *pu1;

	for(pu1 = s1, pu2 = s2; n > 0; --n, ++pu, ++pu2)
	{
		*pu1 = *pu2;
	}
	return s1;
}

实现过程没有进行错误处理。第11、13行将s1转换为unsigned char类型指针,再对其进行赋值。

如果确定目标串s1和源串s2不重叠,函数memcpy()将快速而安全地执行复制,如果它们两个能重叠,可以使用memmove()来代替它。不要认为这两个函数以任何一种特殊的顺序访问存储空间。如果想在一个字符数组的相邻元素构成的序列中存储相同的值,可以使用memset()函数。

更多请参考C语言头文件string.h说明。

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《memcpy函数》
日志链接:http://furzoom.com/function-memcpy/
博客名称:枫竹梦

【上一篇】
【下一篇】

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部