自己实现基本的C标准库函数——实现memcpy
来源:互联网 发布:淘宝店铺第四层级 编辑:程序博客网 时间:2024/06/03 22:48
不调用库函数,实现memcpy。
转自:http://hi.baidu.com/sernger/blog/item/fa900ecb43d44f4ff21fe7ea.html
首先对这个函数做一些说明。
#include <string.h>
void *memcpy(void *to, const void *from, size_t count)
函数memcpy()从from指向的数组向to指向的数组复制count个字符。如果两数组重叠,不定义函数的行为。
在C99中,to和from由restrict修饰。
先来看看微软的实现:
void * __cdecl memcpy (
void * dst,
const void * src,
size_t count
)
{
void * ret = dst;
#if defined (_M_IA64)
{
extern void RtlMoveMemory( void *, const void *, size_t count );
RtlMoveMemory( dst, src, count );
}
#else /* defined (_M_IA64) */
/*
* copy from lower addresses to higher addresses
*/
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
#endif /* defined (_M_IA64) */
return(ret);
}
再来看看coreutils中的实现:
void *
memcpy (void *destaddr, void const *srcaddr, size_t len)
{
char *dest = destaddr;
char const *src = srcaddr;
while (len-- > 0)
*dest++ = *src++;
return destaddr;
}
再来看Linux中实现:
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while (count--)
*tmp++ = *s++;
return dest;
}
如果考虑地址重叠的问题,面试一般希望考虑这个问题,答案如下:
转自:http://topic.csdn.net/u/20080324/12/7059a90f-905a-4984-abb3-a9e43e440d16.html
- 自己实现基本的C标准库函数——实现memcpy
- 库函数memcpy的实现
- 自己实现的库函数(memset,memcmp,memcpy,memmove)
- 自己实现基本的C标准库字符串处理函数——实现strcpy
- 学习笔记——strlen、strcpy、memcpy的c语言实现,不调用库函数
- 自己实现基本的C标准库字符串处理函数——基本问题
- 自己实现基本的C标准库字符串处理函数——基本问题(转载)
- C语言标准库函数getenv的实现
- C基本库函数实现
- 【c语言】不用库函数实现memcpy
- 【C语言】模拟实现memcpy库函数
- C常见标准库函数实现
- memcpy、strstr库函数实现
- C语言字符串相关库函数的实现strcpy、memcpy、strncpy、strcat、strncpy、memset、memcpy、strcpy
- C/C++ Prime学习要点1——实现memcpy库函数
- 自己实现C语言库函数
- memcpy, memccpy函数实现——string.h库函数
- 不用库函数,自己实现strcpy和memcpy函数
- 这年夏天
- MySql 表的主键索引问题
- 数据结构 迷宫 C++源代码 非递归解法
- 关于中兴校园程序设计比赛其中一个类似NPC问题的算法
- VB.NET/ASP.NET编码规范
- 自己实现基本的C标准库函数——实现memcpy
- 堆和栈的区别
- IQ最高纪录
- SQLServer2005 基本语句
- C#基于Socket服务器端实现
- char *p
- 在asp.net 下 控制台输出
- JS操作Cookie 大全
- 征服MFC