使用memcpy后无法打印指针

sbh*_*tla 0 c pointers

我正在尝试使用自己的memcpy版本将字符数组从一个指针复制到另一个指针.但是,这会产生错误.看来printf存在问题.

其次,官方memcpy函数返回目标指针.这真的需要吗?如果我修改*dest,它应该反映在*d中.那么返回什么需要什么呢?

#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;
}
Run Code Online (Sandbox Code Playgroud)

Iha*_*imi 5

你取消引用一个NULL未定义行为的指针,你应该分配空间并指向它,d以便它可以工作,这样做,而不是

d = NULL
Run Code Online (Sandbox Code Playgroud)

d = malloc(3);
Run Code Online (Sandbox Code Playgroud)

别忘了

free(d);
Run Code Online (Sandbox Code Playgroud)

之后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++;
}
Run Code Online (Sandbox Code Playgroud)

然后你的主要是

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;
}
Run Code Online (Sandbox Code Playgroud)