打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
memcpy&memmove的比较
题目:编写一个函数将内存某一位置开始,地址长度为n的数据复制到内存的另一个位置中。
(笔试时我不太清楚如何实现向内存中读,写数据。请高手指教!)
///////////////////////////////////////////////////////////////////////

这类题在国内好一些的软件公司的笔试中经常出现。
C标准库的<string.h>中提供了memcpy,memmove等函数实现。
void *memcpy(void *dest, const void *src, size_t len);
void *memmove(void *dest, const void *src, size_t len);
说明:
memcpy与memmove都是从src向dest复制len个字符并返回dest。
差别在于memmove能对src与dest重叠内存区正确工作,即memmove好象先把src内存区先复制到另一临时内存区

,然后再复制到dest内存区(但库的实际实现中没有用临时内存区);
而memcpy的行为在src与dest的重叠内存区上是未定义的,但memcpy往往比memmove更快一些。

下面我们来自己实现它们:
;
; /* memcpy Algorithm: */
;
; void * memcpy(void * dst, void * src, size_t count)
; {
; void * ret = dst;
;
;
; while (count--)
; *dst++ = *src++;
;
/* 返回dst的指针 */
; return(ret);
; }


; /* memmove Algorithm: */
;
; void * memmove(void * dst, void * src, size_t count)
; {
; void * ret = dst;
;
; if (dst <= src || dst >= (src + count))
{
; /* 当没有重叠内存区域时 */
; while (count--)
; *dst++ = *src++;
; }
; else
{
; /* 当出现重叠内存区域时 */
; dst += count - 1;
; src += count - 1;
;
; while (count--)
; *dst-- = *src--;
; }
;
; return(ret);
; }
以上我只写了一个简单的实现,想更深入理解,请参阅:
《The Standard C Library》/*库作者讲述库的实现*/
《C语言接口与实现》
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
字符串库函数strcpy strcmp strstr memcpy memmove等的实现
strcpy,memcpy,memmove,memset,strncpy
memcpy与memmove的区别
C语言中strcpy,strcmp,strlen,strcat函数原型
memcpy, memmove的实现
bcopy(), memccpy(), memcpy(), strcpy(), strncpy()的区别与使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服