首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用'memcpy‘函数

使用'memcpy‘函数
EN

Stack Overflow用户
提问于 2013-06-18 11:43:17
回答 6查看 2K关注 0票数 0

要将数组b[]复制到数组a[]中,可以使用函数memcpy,如下所示:memcpy(a,b,sizeof(a))

但是memcpy只是将字节从一个地方复制到另一个地方。

我的问题是:

1. memcpy如何通过复制字节将数组b[]的元素复制到a[]中? 2.为什么提供sizeof(a)作为参数?

我对编程很陌生,所以,温柔点。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-06-18 11:51:19

sizeof(a)是数组a的总大小。例如,在

代码语言:javascript
复制
int a[3];
printf("%d", sizeof(a));

在大多数系统中,sizeof a都是12 (因为int通常是4个字节,其中有3个字节)。

memcpy不知道a是一个数组。它只知道a指向某个内存地址,所以您必须告诉它要传递多少字节。大多数地方将memcpy的签名描述为:

代码语言:javascript
复制
void *memcpy(void *dst, const void *src, size_t nbytes)
票数 5
EN

Stack Overflow用户

发布于 2013-06-18 11:50:17

代码语言:javascript
复制
#include <string.h>

void *
memcpy(void *s1, const void *s2, register size_t n)
{
    register char *p1 = s1;
    register const char *p2 = s2;

    if(n) {
        n++;
        while (--n > 0) {
            *p1++ = *p2++;
        }
    }
    return s1;
}

下面是memcpy的源代码。如您所见,它从寄存器1逐个移动到寄存器1中的每个元素。

所以它知道寄存器有多大,所以在复制整个寄存器之前,它必须跳过多少元素。

票数 2
EN

Stack Overflow用户

发布于 2013-06-18 11:47:44

memcpy的工作方式与组装指令MOV的工作原理一样(显然,memcpy必须使用MOV实现)。不同之处在于,我们移动了一个数据块,而不是一个变量。需要块的大小,因为进程需要知道要从一个位置复制到另一个位置的字节数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17167956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档