使用 memcpy 后无法打印指针

Unable to print a pointer after using memcpy

我正在尝试让我自己的 memcpy 版本将字符数组从一个指针复制到另一个指针。但是,这会产生错误。 printf 好像有问题。

其次,官方的memcpy函数return是目标指针。真的需要吗?如果我修改*dest,它应该反映在*d中。那么有什么必要return么?

#include <stdio.h>

void memcpy2(void *dest, const void *src, size_t n)
{
    char *dp = dest;
    const char *sp = src;
    while (n--)
        *dp++ = *sp++;
}

int main(void) {
    char *c = "Hello";
    char *d=NULL;
    memcpy2(d,c,3);
    printf( "%c", *d);
    return 0;
}

您取消引用一个 NULL 指针,这是未定义的行为,您应该分配 space 并使用 d 指向它以使其工作,执行此操作,而不是

d = NULL

写入

d = malloc(3);

别忘了

free(d);

printf().

之后

如果你想自动使d成为一个有效的指针,那么memcpy2()这样写

void memcpy2(void **dest, const void *src, size_t n)
{
    *dest = NULL;
    if ((src == NULL) || (n == 0))
        return;
    *dest = malloc(n);
    if (*dest == NULL)
        return;

    char *dp = *dest;
    const char *sp = src;
    while (n--)
        *dp++ = *sp++;
}

然后你的主要是

int main(void) {
    char *c = "Hello";
    char *d = NULL;

    memcpy2(&d, c, 3);
       /*   ^ pass the address of the pointer, so you can change where it points to */

    if (d != NULL) /* prevent NULL dereference. */
    {
        printf("%c", *d);
        free(d);
    }
    return 0;
}