实施memcopy

时间:2016-11-21 23:12:33

标签: c arrays string memcpy

我被要求实现我自己的memcopy版本。这是我从互联网上找到的。令我困惑的是,我们有两个mp = [quad(mofp, p_bar, pres, args=(mu, Z))[0] for p_bar in pwf] 指针,为什么我们将它们强制转换为void *

这是否正确?

char*

2 个答案:

答案 0 :(得分:3)

需要强制转换,因为您可能无法取消引用void *类型的指针。因此,当src[i]src类型的指针时,您可能不会写void *。 void类型是不完整的类型。

至于功能,那就错了。

如果查看标准函数memcpy的声明,您会看到它被声明为

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

因此,您编写的函数应该至少看起来像

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

函数定义可以看起来像这个演示程序中所示。

#include <stdio.h>

void * myMemCpy(void *s1, const void *s2, size_t n)
{
    const unsigned char *src = s2;
    unsigned char *dsn = s1;

    while ( n-- ) *dsn++ = *src++;

    return s1;
}

int main(void) 
{
    char s1[] = "Hello";
    char s2[sizeof( s1 )];

    puts( ( char * )myMemCpy( s2, s1, sizeof( s1 ) ) );

    return 0;
}

程序输出

Hello

答案 1 :(得分:0)

您需要对它们进行类型转换,因为“类型”void没有大小(请注意void *)。

然后你的循环一次可以移动一个char(理想情况下是一个字节)。